Spring生命周期
2020-04-27 18:07:53 0 举报
AI智能生成
Spring的生命周期及一些常用的扩展点
作者其他创作
大纲/内容
AbstractApplicationContext
refresh()
prepareRefresh();
准备上下文的环境
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
告诉子类刷新内部bean工厂
createBeanFactory()
创建Bean工厂
customizeBeanFactory
如果用户自定义了允许Bean定义覆盖和允许循环引用则设置为定义的,默认为不允许
loadBeanDefinitions
prepareBeanFactory(beanFactory);
这个方法主要是配置BeanFactory的各种类加载器,需要的依赖和需要忽略的依赖,后处理器,解析器等
postProcessBeanFactory(beanFactory);
invokeBeanFactoryPostProcessors(beanFactory);
invokeBeanFactoryPostProcessors
invokeBeanDefinitionRegistryPostProcessors
postProcessBeanDefinitionRegistry
这里是注释解析器
ConfigurationClassPostProcessor
基本上大部分的基于注解的解析功能都在这里了
ConfigurationClassParser
创建一个配置类解析
ComponentScanAnnotationParser
processConfigBeanDefinitions
parser.parse
processConfigurationClass
BeanDefinitionRegistryPostProcessor
可以动态将Bean注册
BeanFactoryPostProcessor
postProcessBeanFactory
可以修改各个注册的Bean
registerBeanPostProcessors(beanFactory);
initMessageSource();
初始化上下文的消息源。
initApplicationEventMulticaster();
初始化上下文的事件传播器
onRefresh();
在特定上下文子类中初始化其他特殊bean
registerListeners();
检查监听器bean并注册它们
finishBeanFactoryInitialization(beanFactory);
DefaultListableBeanFactory
beanFactory.preInstantiateSingletons();
List<String> beanNames = new ArrayList<>(this.beanDefinitionNames);
获取所有bean定义
for (String beanName : beanNames) {
一个个实例化
getBean(beanName)
AbstractBeanFactory
doGetBean
先尝试从缓存map里取
singletonFactory
AbstractAutowireCapableBeanFactory
createBean
resolveBeforeInstantiation
Give BeanPostProcessors a chance to return a proxy instead of the target bean instance
给一个机会返回一个代理对象
AOP核心
InstantiationAwareBeanPostProcessor
postProcessBeforeInstantiation
doCreateBean
instantiateBean
调用构造函数实例化
boolean earlySingletonExposure
是否允许提前暴露?
是否单例?
是否创建中?
是否允许循环依赖?
addSingletonFactory
允许提前暴露则把bean存到缓存map中
populateBean
注入工作
扩展点:循环一个个后置处理器
postProcessAfterInstantiation
autowire
自动注入
bean里面的成员如果有@Autoware则解释
扩展点
postProcessPropertyValues
applyPropertyValues
真正注入
initializeBean
初始化
invokeAwareMethods
BeanNameAware
BeanClassLoaderAware
BeanFactoryAware
applyBeanPostProcessorsBeforeInitialization
BeanPostProcessor
postProcessBeforeInitialization
invokeInitMethods
InitializingBean
afterPropertiesSet
invokeCustomInitMethod
init
自定义初始方法
applyBeanPostProcessorsAfterInitialization
postProcessAfterInitialization
DisposableBean
注册销毁接口
destroy
对象销毁时会调用
myDestory
自定义销毁方法
先执行DisposableBean再执行myDestory
SmartInitializingSingleton
afterSingletonsInstantiated
finishRefresh();
initLifecycleProcessor()
初始化属于bean自己的生命周期
LifecycleProcessor
getLifecycleProcessor().onRefresh();
DefaultLifecycleProcessor
onRefresh
Lifecycle
start()
stop()
publishEvent(new ContextRefreshedEvent(this));
0 条评论
回复 删除
下一页