1. 程式人生 > >spring autowired和resource生效的幾種情況

spring autowired和resource生效的幾種情況

本質

@Autowired和@Resource是由兩個BeanPostProcessor; 不過在spring內部,有一些特殊用途的BeanPostProcessor子介面.

這裡寫圖片描述

其中,執行到postProcessMergedBeanDefinition時,解析對應bean class中的Autowired Annotation.生成InjectMetadata;

在設定物件屬性時,則執行postProcessPropertyValues去執行對應的InjectMetadata.inject()方法。

註釋生效的幾種方式

1.在xml中手動注入對應的類

<bean class="
org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor />

2.使用AnnotationConfigUtils.registerAnnotationConfigProcessors()方法手動注入, 例如mybatis的MapperScannerConfigurer.
3, 其他的兩種也可都是使用2中的方式進行注入

<context:annotation-config / >
<context:component-scan / >

這兩種配置最終也是通過AnnotationConfigUtils static方法去喚起AutowiredAnnotationBeanPostProcessor。