完成Spring各项功能的重要执行器:各种BeanPostProcessor
ApplicationContext就像在BeanFactory上封装的一层壳,而这层壳也不是什么也没做。ApplicationContext会向BeanFactory注册各种Processor,而实际调用依然是BeanFactory做的。
下面就说明一下各种Processor接口的调用时机。
1、BeanFactoryPostProcessor
- postProcessBeanFactory Bean注册到BeanDefinitionMap之后,但还未实例化前调用
2、BeanPostProcessor
postProcessBeforeInitialization Bean实例化之后,在调用Bean的Init方法前被调用
postProcessAfterInitialization Bean实例化之后,在调用Bean的Init方法后被调用
3、InstantiationAwareBeanPostProcessor
postProcessBeforeInstantiation 实例化前被调用,用于实例化前的短路操作
postProcessAfterInstantiation 实例化和提前曝光自身后,在填充属性前被调用
postProcessPropertyValues 填充属性时被调用,依赖注入就靠此方法完成
4、MergedBeanDefinitionPostProcessor
- postProcessMergedBeanDefinition 实例化后但还未提前曝光自身时调用
5、SmartInstantiationAwareBeanPostProcessor
- determineCandidateConstructors 实例化时调用返回类的构造函数
6、InitializingBean
- afterPropertiesSet Bean实例化之后,在调用Bean的Init方法时,在所有参数初始化后被调用