Bean的生命周期
2023-07-28 22:50:07 0 举报
详细介绍相关扩展点以及生命周期
作者其他创作
大纲/内容
applyBeanPostProcessorsAfterInitialization
1. 当前Bean是否实现了DisposableBean接口2. 或者,当前Bean是否实现了AutoCloseable接口3. BeanDefinition中是否指定了destroyMethod4. 调用DestructionAwareBeanPostProcessor.requiresDestruction(bean)进行判断 a. ApplicationListenerDetector中直接使得ApplicationListener是DisposableBean b. InitDestroyAnnotationBeanPostProcessor中使得拥有@PreDestroy注解了的方法就是DisposableBean5. 把符合上述任意一个条件的Bean适配成DisposableBeanAdapter对象,并存入disposableBeans中(一个LinkedHashMap)
实例化前
postProcessMergedBeanDefinition
循环依赖-添加到三级缓存解决循环依赖引用AOP
doGetBean
resolveBeforeInstantiation
初始化前
实例化后
找出程序员手动实现该处理器的类BeanPostProcessor执行postProcessBeforeInitialization()方法
使用@Import,@Autowired等注解
根据不同的Scope去执行createBean
初始化非懒加载的bean
创建Bean
如果这里返回了该bean就会终止创建Bean的过程,但是还是会执行初始化后的切面方法
如果实现了InitializingBean接口),就会调用 afterPropertiesSet 方法。
如何将一个对象成为Spring的Bean
解析@Bean,推断构造方法
初始化后
找出程序员手动实现该处理器的类InstantiationAwareBeanPostProcessor执行postProcessAfterInstantiation方法
populateBean
找出程序员手动实现该处理器的类SmartInstantiationAwareBeanPostProcessor执行determineCandidateConstructors方法
MergedBeanDefinitionPostProcessor
refresh()
找出程序员手动实现该处理器的类BeanPostProcessor执行postProcessAfterInitialization()方法
BeanDefinitionRegistryPostProcessor实现postProcessBeanDefinitionRegistry方法,注册一个新的beanDefinition进去。
initializeBean
createBeanInstance
applyMergedBeanDefinitionPostProcessors
找寻注入点@Autowired@Resources
如果配置了init-method属性或者标记了@PostConscutor注解),就会执行其对应的方法
Bean销毁
invokeCustomInitMethod
后置处理器,去收集/预解析属性元数据:主要解析的就是下面两个类 AutowiredAnnotationBeanPostProcessor 支持@Autowired,@Value注解 CommonAnnotationBeanPostProcessor 支持@PostConstruct,@PreDestroy,@Resource注解通过循环遍历类属性和方法,找到有指定注解的属性,封装到注入元数据对象InjectionMetadata在属性填充populateBean时,从缓存中获取InjectionMetadata,进行注入
属性填充
createBean
指定实例化的构造方法
finishBeanFactoryInitialization().preInstantiateSingletons()
执行该方法
InstantiationAwareBeanPostProcessor的postProcessProperties方法
InitializingBean.afterPropertiesSet()
实例化
实现ImportBeanDefinitionRegistrar接口,重写registerBeanDefinitions方法
实现FactoryBean重写getObject方法
bean的生命周期
初始化
找出程序员手动实现该处理器的类InstantiationAwareBeanPostProcessor执行postProcessBeforeInstantiation方法
可以终止赋值
SmartInstantiationAwareBeanPostProcessor的getEarlyBeanReference方法
0 条评论
回复 删除
下一页