SpringBean的生命周期
2020-06-26 17:15:48 4 举报
循环依赖
作者其他创作
大纲/内容
//把需要执行@preDestroy 实现DisposableBean接口,和destroyMethod方法设置到\t\t\t//beanFactory的disposableBeans这个属性中,在容器close的时候会调用
applyMergedBeanDefinitionPostProcessors
//首先会推断构造方法,然后通过构造方法去创建对象\t\t\t//如果构造方法是有参数类型的则getBean去获取注入的bean\t\t\t//如果是Map List等集合的则需要拿到泛型然后getBean,最后通过convert类型转化器转成集合注入到构造方法中。\t\t\t//AutowiredAnnotationBeanPostProcessor#determineCandidateConstructors
1.postProcessAfterInstantiation bean实例化后置处理器。这个后置处理方法可以对bean的实例(对象非bean)进行自己修改,并且可以通过返回值决定是不是需要走自动填充属性。2.xml注入解析。3.AutowiredAnnotationBeanPostProcessor 和CommonAnnotationBeanPostProcessor负责注入属性。
doCreateBean
resolveBeforeInstantiation
1.invokeAwareMethods首先执行三个Aware(BeanNameAware、BeanClassLoaderAware、BeanFactoryAware)2.执行所有的初始化前置处理器postProcessBeforeInitialization 2.1 ApplicationContextAwareProcessor(EnvironmentAware、EmbeddedValueResolverAware、ResourceLoaderAware、ApplicationEventPublisherAware、MessageSourceAware、ApplicationContextAware(如果是直接@AutoWired注入ac对象则在@Autowired阶段处理的)) 2.2 ImportAwareBeanPostProcessor 2.3 InitDestroyAnnotationBeanPostProcessor(执行@PostConstruct,缓存@PreDestroy)3. invokeInitMethods执行实现了InitializingBean接口的初始化方法afterPropertiesSet和initMethod(xml)4.执行所有的初始化后置处理器postProcessAfterInitialization 4.1 ApplicationListenerDetector 4.2 AbstractAutoProxyCreator创建AOP代理
createBeanInstance
addSingletonFactory暴露当前对象到一个lamda表达式中
populateBean
initializeBean
1.AutowiredAnnotationBeanPostProcessor(解析缓存Autowired、value)。2.CommonAnnotationBeanPostProcessor(解析@Resource)3.ApplicationListenerDetector(缓存ApplicationListener类型的)
registerDisposableBeanIfNecessary
postProcessBeforeInstantiationbean实例化前置处理器,如果返回了bean直接就不走后面流程了
0 条评论
下一页