两个重要的方法:
初始化前:postProcessBeforeInitialization
初始化后:postProcessAfterInitialization
子接口
InstantiationAwareBeanPostProcessor
实例化前:postProcessBeforeInstantiation
实例化后:postProcessAfterInstantiation
属性赋值处理:postProcessProperties
SmartInstantiationAwareBeanPostProcessor
预测bean的类型:predictBeanType
确定要为给定bean使用的候选构造函数:determineCandidateConstructors
获取对指定bean的早期访问的引用,通常用于解决循环引用:getEarlyBeanReference
MergedBeanDefinitionPostProcessor
合并BeanDefinition的后置处理:postProcessMergedBeanDefinition
重置BeanDefinition:resetBeanDefinition
实现类
AutowiredAnnotationBeanPostProcessor
作用:解析Autowired、Value、javax.inject.Inject三个注解
实现了以下方法
postProcessMergedBeanDefinition
resetBeanDefinition
determineCandidateConstructors
postProcessProperties
从createApplicationContext()开始,创建上下文对象时,通过反射执行AnnotationConfigServletWebServerApplicationContext的构造函数时,调用AnnotatedBeanDefinitionReader的构造函数,调用了AnnotationConfigUtils.registerAnnotationConfigProcessors
通过registerAnnotationConfigProcessors方法注册到beanFactory中
ConfigurationClassPostProcessor
AutowiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
EventListenerMethodProcessor
DefaultEventListenerFactory
PersistenceAnnotationBeanPostProcessor
从refresh开始,通过registerBeanPostProcessors方法,调用PostProcessorRegistrationDelegate.registerBeanPostProcessors,通过beanFactory.addBeanPostProcessor将其添加到beanPostProcessors中
依赖查找bean时 beanFactory.getBean-->doGetBean-->getSingleton-->singletonFactory.getObject()-->createBean-->doCreateBean-->createBeanInstance-->determineConstructorsFromBeanPostProcessors
在填充属性时,populateBean,执行postProcessProperties方法,进行inject,解析依赖beanFactory.resolveDependency,又重新依赖查找getBean
总结一下,BeanPostProcessor是个什么呢?就是在bean的生命周期中的一个处理器,AutowiredAnnotationBeanPostProcessor是负责解析标注Autowired等注解bean,在属性赋值时,通过依赖注入找到bean继续加载。