上篇文章主要介绍了EventListener注解的使用及源码分析:
注解是由EventListenerMethodProcessor后置处理器里的afterSingletonsInstantiated方法,而这个方法顾名思义,在单实例对象初始化之触发的,全部都在ioc容器refresh方法里面。
@EventListener--- Spring源码从入门到精通(三十)
这篇文章主要介绍refresh方法:
一、prepareRefresh()
initPropertySources刷新前的预处理;子类自定义个性化的属性设置方法。
getEnvironment().validateRequiredPropertites()属性效验是否合法。
earlyApplicationEvent事件;保存容器中早期一些事件。
二、obtainFreshBeanFactory()获取beanFactory
1、refreshBeanFactory刷新【也就是创建】beanFactory,A、先创建一个beanFactory对象;B、设置序列化id。
2、getBeanFactory返回刚刚由GenericApplicationContext构造方法创建的beanFactory。
3、返回默认的DefaultListableBeanFactory。
获取beanFactory之后怎么办呢?
三、prepareBeanFactory预处理beanFactory
1、设置类加载器,表达式解析器等
2、添加beanPostProcessor【ApplicationContextAwareProcessor】
3、通过ignoreDependencyInterface设置忽略自动装配的依赖接口EnviromentAware,EmbeddedValueResolverAware等等。
4、 通过registerResolvableDependency设置自动注入组件beanFactory, ResourceLoader,AplicationEventPublisher,ApplicationContext。
5、添加另一个beanPostProcessor【AplplicationListenerDetector】
6、添加编译时的AspectJ;
7、给beanFactory中注册一些能用的组件;enviroment【ConfigurableEnviroment】,systemProperties【返回Map】,systemEnviroment【返回Map】
四、postProcessorBeanFactory
作用:beanFactory准备工作完成后的后置处理工作
- 子类可以重写这个方法来给beanFactory创建完成预准备完成之后做进一步设置。
以上就是BeanFactory的创建及预准备工作。