Spring启动流程-2022-06-01初稿
2022-06-01 18:11:08 9 举报
Spring启动流程
作者其他创作
大纲/内容
没有实现任何排序接口的
根据InstantiationStrategy使用不同的策略来生成一般来说标有Configuration注解的会使用Cglib
finishBeanFactoryInitialization实例化所有剩余的(非lazy-init)单例
if present add the PersistenceAnnotationBeanPostProcessor
AbstractApplicationContext#invokeBeanFactoryPostProcessors()里面调用PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors方法
for循环遍历所有在beanDefinitionNames的bean
否
ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry方法
populateBean属性赋值
MergedBeanDefinitionPostProcessor
getBean方法
应用场景
先执行BeanDefinitionRegistryPostProcessors
instantiateBean
invokeBeanFactoryPostProcessors调用在上下文中注册为bean的工厂处理器。
PropertyValues是否为空
大于
核心是把传入的配置类注册到beanDefinitionMap
spring的自动装配后处理器在此工作直接返回true
是
AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);
processConfigBeanDefinitions查找类上标注Configuration注解的类
beanFactory.addBeanPostProcessor(postProcessor)
是否提前创建了对象
registerBeanPostProcessors注册BeanPostProcessor拦截器
通过beanFactory.getBeanNamesForType查找
循环创建BeanPostProcessor对象
ConfigurationClassPostProcessor实现BeanDefinitionRegistryPostProcessor
applyMergedBeanDefinitionPostProcessors
PriorityOrdered
刚开始的时候的是ConfigurationClassPostProcessor用于处理@Configuration注解
注册BeanPostProcessor
ApplicationContextAwareProcessor注入Aware相关组件
结束
ConfigurationClassParser.processConfigurationClass
回调SmartInstantiationAwareBeanPostProcessor.determineCandidateConstructors
DefaultEventListenerFactory实现EventListenerFactory
determineConstructorsFromBeanPostProcessors决定使用哪个构造器
通过singletonFactory.getObject()进行回调
applyBeanPostProcessorsBeforeInitialization
核心是注册5个类到beanDefinitionMap
postProcessBeanFactory对bean工厂进行后置处理子类实现
可以再次修改属性InitializingBean.afterPropertiesSet
获取LoadTimeWeaverAware
beanFactory添加addBeanPostProcessor(ApplicationContextAwareProcessor)addBeanPostProcessor(ApplicationListenerDetector)忽略ignoreDependencyInterface依赖接口包括EnvironmentAwareEmbeddedValueResolverAwareResourceLoaderAwareApplicationEventPublisherAwareMessageSourceAwareApplicationContextAwareApplicationStartupAware注册registerSingleton环境变量包括environmentsystemPropertiessystemEnvironmentapplicationStartup
beanFactory.preInstantiateSingletons()
doCreateBean
invokeAwareMethods主要处理BeanNameAwareBeanClassLoaderAwareBeanFactoryAware
applyBeanPostProcessorsAfterInitialization
prepareBeanFactory配置工厂的标准上下文特征例如上下文的 ClassLoader 和后处理器
doGetBeanNamesForType(ApplicationListener.clss)
BeanPostProcessor
InstantiationAwareBeanPostProcessor.postProcessPropertyValues
resolveBeforeInstantiationBeanPostProcessors 有机会返回一个代理而不是目标 bean 实例。
factory是否持有InstantiationAwareBeanPostProcessor
AnnotationConfigApplicationContext构造方法
ConfigurationClassParser.doProcessConfigurationClass
SmartInstantiationAwareBeanPostProcessor是InstantiationAwareBeanPostProcessor的子类
CommonAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor实现InstantiationAwareBeanPostProcessor
AutowiredAnnotationBeanPostProcessor
BeanNameAwareBeanFactoryAwarefont color=\"#ff0000\
找到ConfigurationClassPostProcessor
createBean
InstantiationAwareBeanPostProcessor
register(componentClasses)注册一个或多个要处理的组件类
obtainFreshBeanFactory获取DefaultListableBeanFactory工厂
调用PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors来回调postProcessBeanFactory方法
PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors执行所有的BeanFactoryPostProcessor
无需特殊处理:只需使用无参数构造函数
createBeanInstance
是否是InitializingBean
主要处理BeanPostProcessor.postProcessAfterInitialization
自定义的没有排序BeanPostProcessor
getBean来获取(没有的话进行创建过程)ConfigurationClassPostProcessor具体下面在分析getBean过程
EventListenerMethodProcessor实现BeanFactoryPostProcessor
主要处理BeanPostProcessor.postProcessBeforeInitialization
Ordered
SmartInstantiationAwareBeanPostProcessor.predictBeanType()决定当前未初始化的组件类型
创建/获取bean结束
对给定的属性值进行后处理 到给定的bean(自动装配)InstantiationAwareBeanPostProcessor.postProcessProperties
ConfigurationClassParser.parse处理候选类
invokeInitMethods
调用PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors来回调postProcessBeanDefinitionRegistry方法
applyBeanPostProcessorsBeforeInstantiation
最重要的refresh()方法
registerBeanPostProcessors
触发调用
获取到PropertyValues
0 条评论
下一页