目录
3、AutowiredAnnotationBeanPostProcessor
1、简要
基于AnnotationConfigApplicationContext。
2、Spring容器启动流程
先简要说一下Spring容器的初始化。从AnnotationConfigApplicationContext这个类出发,创建这个类,然后往里面丢一些组件,如beanFactory,注解配置读取器,类路径扫描器等。可以理解为Spring容器就是一个管理bean的工厂,bean由容器创建销毁。Spring容器初始化之后,先扫描出要放容器的bean,将其包装成BeanDefinition对象,然后通过反射创建bean并完成赋值操作。
而被@Autowired这个注解的类、方法等怎么被创建成一个bean的呢?
在registerAnnotationConfigProcessors中会向容器注入PostProcessorAutowiredAnnotationBean后置处理器,这个是用来完成@Autowired自动注入的。下面就展开讲一下这个后置处理器。
3、AutowiredAnnotationBeanPostProcessor
类继承关系如下:
简单整理了一个图,助于理解。
AutowiredAnnotationBeanPostProcessor中有一个set会保存该类会处理的注解。
实现了MergedBeanDefinitionPostProcessor类,通过这个方法实现注入类型的预解析。将需要依赖注入的属性信息封装到InjectionMetadata对象中。
继承了InstantiationAwareBeanPostProcessorAdapter类,设置bean的属性,为其赋值。对bean完成依赖注入就是根据InjectionMetadata对象里封装的内容进行赋值。
实现BeanFactoryAware为了拿到BeanFactory。
实现PricorityOrdered是为了标识自身的注入顺序。
@AutoWired大概就是这样实现的啦~
参考:
MergedBeanDefinitionPostProcessor和@Autowired,@Value的关系_Enjoy博客-CSDN博客