上一篇分析了IOC容器的前四个方法,接下来继续看其他方法。
二.invokeBeanFactoryPostProcesssors(beanFactory):执行BeanFacotoryPostProcessor后置处理器的postProcessBeanFacotory()增强方法。
invokeBeanFactoryPostProcProcesssors(beanFactory)方法会实例化和调用所有BeanFactoryPostProcessor(包括其子类BeanDefinitionPostProcessor)。
首先,需要明白BeanFacoryPostProcessor是什么?
BeanFacoryPostProcessor:bean工厂增强器,是spring初始化BeanFactory时对外暴露的扩展点,是spring容器允许BeanFactoryPostProcessor在容器实例化任何bean之前读取bean的定义,并可以修改它。
三.registerBeanPostProcessors(beanFactory):注册BeanPostProcessor。
主要是将所有实现了BeanPostProcessor接口的类注册到BeanFactory中。这里只是完成了注册工作,并没有执行BeanPostProcessor的增强逻辑,真正执行是在bean初始化前,后,后面我们看到bean初始化逻辑的时候可以看到哦。
首先,明白BeanPostProcessor是干什么的?
BeanPostProcessor是bean的后置处理器,它允许我们在bean初始化前,初始化后,对bean进行实例化修改。
BeanPostProcessor是一个接口,其定义主要有两个方法:
1.postProcessBeforeInitialization(),执行初始化前会调用
2.postProcessAfterInitiallization(),执行初始化后会调用
读者需要区分BeanFactoryPostProcessor和BeanPostProcessor。
BeanFactoryPostProcessor:针对BeanFactory的扩展,主要用在bean实例化之前,读取bean的定义,允许我们修改它。
BeanPostProcessor:是针对bean的扩展,主要用在bean实例化之后,执行初始化方法前后,允许我们对bean实例进行修改。
接下来,看一下registerBeanPostProcessors(beanFactory)的核心逻辑:
处理逻辑和之前BeanFactoryPostProcessorFactory类似。
四.initMessageSourece():为上下安初始化MessageSource
五.initApplicationEventMulticaseter():初始化事件多播器
先判断有没有用户自定义的ApplicationEventMuticaster事件多播放器,没有的话创建一个SimpleApplicationEventMulticaster,并作为单例bean注册到bean工厂。