-
Spring启动时,会通过
ContextNamespaceHandler
加载一些 标签解析器,其中包括AnnotationConfigBeanDefinitionParser
,其会解析annotation-config
标签,并注册一些关键的PostProcessor
:CommonAnnotationBeanPostProcessor
,AutowiredAnnotationBeanPostProcessor
ComponentScanBeanDefinitionParser
,其会解析component-scan
标签,扫描注册bean,然后将 bean 与CommonAnnotationBeanPostProcessor
/AutowiredAnnotationBeanPostProcessor
关联起来
-
在实例化 某个bean 之后,会
- 调用
CommonAnnotationBeanPostProcessor
的postProcessMergedBeanDefinition
方法,该方法会扫描该bean属性上是否有@Resource
注解,并记录下来 - 调用
AutowiredAnnotationBeanPostProcessor
的postProcessMergedBeanDefinition
方法,该方法会扫描该bean属性上是否有@Autowired
和@Value
注解,并记录下来
Spring bean的实例化过程中,有哪些挂载点及其时间点,可以参考笔者的另一篇文章:Spring中那些PostProcessor挂载点
- 调用
-
在
populateBean
,给 bean 属性赋值的时候,会分别调用这两个BeanPostProcessor
的postProcessPropertyValues
方法,判断其是否有以上的@Resource
、@Autowired
注解。如果有,则还需要进行注册
Spring @Autowired、@Resource注入过程
最新推荐文章于 2022-03-30 15:29:39 发布