1.先区分BeanFactoryPostProcessor与BeanPostProcessor的区别:
(1)BeanFactoryPostProcessor会在加载bean文件之后实例化bean之前
(2)BeanPostProcessor会在实例化bean之后执行的
其中spring容器主要是在AbstractApplicationContext类里的refresh()方法进行展开的
BeanFactoryPostProcessor是在invokeBeanFactoryPostProcessors方法中有所有体向,找出实现BeanFactoryPostProcessor接口的bean,并根据优先级别进行调用postProcessorBeanFactory方法,其中这个方法可以自定义属性编辑器,或者为bean注入属性值,进行实例化。
registerBeanPostProcessors():这个会从BeanDifinitionRegistry找到实现BeanPostFacotry接口的bean,并注册到后置处理器的注册表中
(3)BeanPostProcessor会在bean实例化后,执行实例化方法之前,其中是在refresh()方法中的finishBeanFactoryInitialization()会执行的(执行的方法:postProcessBeforeInitialization, postProcessAfterInitialization):
1)bean实现了InitializingBean接口,对应的方法为afterPropertiesSet
2)在bean定义的时候,通过init-method设置的方法
2.了解DefinitionReder:加载bean
一般beanFactory会对bean进行以下两步操作:
(1)加载资源,通过文件的路径加载配置文件
(2)解析资源,通过解析xml文件得到bean