Spring
2021-04-16 11:14:10 20 举报
Spring生命周期
作者其他创作
大纲/内容
META-INF/spring.factories
setInitializers
注入springcloud的BootstrapApplicationListener
BeanPostProcessor.postProcessAfterInitialization
populateBean
SmartInstantiationAwareBeanPostProcessor.determineCandidateConstructors
BeanPostProcessor.postProcessBeforeInitialization
AbstractAutoProxyCreator实现了InstantiationAwareBeanPostProcessor接口,在方法postProcessBeforeInstantiation中找到Spring容器中所有的增强器,为创建代理做准备;在方法postProcessAfterInitialization中通过前面找到的候选增强器中找到合适的增强器来创建代理对象,最后调用目标方法,进去到代理对象的invoke方法中进行调用。
afterRefresh方法
BeanFactory使用指定构造函数/默认构造函数/factorybean等不同的策略创建bean实例clazz.getDeclaredConstructor().newInstance/ factoryBean.getClass()
setListeners
填充属性
完成一些准备工作prepareRefresh/prepareBeanFactory
循环依赖三级缓存的作用
finishBeanFactoryInitialization
springcloud的BootstrapApplicationListener会接收事件后创建Context,所以cloud的context比boot的先创建,是boot的父上下文
BeanDefinitionRegistryPostProcessor.postProcessBeanFactory
InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation
ApplicationRunner和CommandLineRunner扩展点,可在容器加载完成后做一些操作
根据是否webspan style=\"font-size: inherit;\
Aop原理
优先级:PriorityOrderedOrdered普通
根据是否单例、是否正在创建以及是否支持循环依赖提前暴露对象
SpringBootApplication注解的组合注解中有Component注解,所以启动类被解析成BeanDefinition注入到BeanFactory中
AbstractAutoProxyCreator实现了该方法,返回代理对象
init-method
SmartInitializingSingleton.afterSingletonsInstantiated
AOP入口
InitializingBean.afterPropertiesSet
创建BeanDefinitionLoader加载有Component注解的启动类
激活Aware方法
调用容器的refresh方法
完整对象
销毁流程
获取到ConfigurationClassPostProcessor后,解析启动类判断是否有@Configuration注解(SpringBootApplication组合注解中存在)1、解析类上得ComponentScan注解,扫描配置得路径下的所有类的BeanDefinition,注册到BeanFactory中。2、解析Import注解,处理ImportSelector实现类和ImportBeanDefinitionRegistrar实现类 2.1 执行EnableAutoConfigurationImportSelector的selectImports方法,该方法会获取classpath下META-INF/spring.factories中配置的EnableAutoConfiguration的值,通过removeDuplicates/exclusions/filter后递归解析,完成自动装配。 2.2 执行ImportBeanDefinitionRegistrar的registerBeanDefinitions方法,导入一些bean定义,如Aop的AspectJAutoProxyRegistrar,Feign的FeignClientsRegistrar
发布EnvironmentPreparedEvent事件
spring定义的扩展点
@Autowire属性注入AutowiredAnnotationBeanPostProcessor
SpringApplication.run启动项目
InstantiationAwareBeanPostProcessor.postProcessPropertyValues
BeanFactoryPostProcessor.postProcessBeanFactory
BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry
按顺序注册BeanPostProcessor
创建BeanDefinitionReader时会调用AnnotationConfigUtils.registerAnnotationConfigProcessors注册一些后置处理器的BeanDefinition,自动装配处理类ConfigurationClassPostProcessor
创建ObjectFactory放singletonFactories三级缓存,getObject方法会调用SmartInstantiationAwareBeanPostProcessor.getEarlyBeanReference,AbstractAutoProxyCreator实现了该方法,wrapIfNecessary返回代理对象或原对象
https://www.cnblogs.com/grey-wolf/p/13034371.html 三级缓存
InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation
0 条评论
回复 删除
下一页