bean生命周期
2021-04-23 14:03:23 0 举报
bean生命周期
作者其他创作
大纲/内容
一切创建bean的方法的入口其实都是getBean,spring中对于这个方法又是重载又是重写,也就是说什么情况下需要从spring中获取bean,什么情况就会去创建bean,条件就是这个bean是被spring扫描到的已经加载到beanDefinition中的
主要是对doCreateBean方法中initializeBean方法的解释
所以说bean的创建其实是动态的,比如循环依赖,A创建时要注入B,那么首先就要创建B。再比如一个类实现了afterPropertiesSet和applicationContextAware接口,当去spring中获取其他bean对象时,就是用得getBean方法,有就获取没有就动态创建然后再返回
实现的一系列接口中,BeanNameAware,BeanClassLoaderAware,BeanFactoryAware接口是在invokeAwareMethods方法中实现的,而其他的aware接口则是在ApplicationContextAwareProcessor这个类中实现的,也就是说一些aware接口的实现是在postProcessBeforeInitialization初始化前置方法中实现的,而ApplicationContextAwareProcessor这个类的初始化则是在prepareBeanFactory方法中,beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this));
bean的创建准备来说必须是分2步的,一是实列化,二是初始化,也正是2步走原因才解决了循环依赖的问题
postProcessAfterInitialization初始化后置方法
bean的创建其实是动态的,它并不是局限于某一个方法一起创建所有bean的对象。诚然refresh方法中finishBeanFactoryInitialization是对单列非懒加载的bean进行初始化的方法,但是bean的创建并不局限于这个方法。
postProcessBeforeInitialization初始化前置方法
bean的生命周期详解(官方版)
实现一系列aware接口
实现postProcessBeforeDestruction方法或者调用destroy-method方法销毁bean
在invokeBeanFactoryPostProcessors中已经将所有的可以注入到spring容器中的对象的类加载到了beanDefinition中,只是还没有进行类对象的实列化操作。
populateBean对实列化后的bean进行属性注入,自动装配autowired和循环依赖在此处解决
在beanFactory中存在官方对bean生命周期的解释
afterPropertiesSet(自己定义的bean实现InitializingBean接口)和init-method(反射)
bean创建首先实例化,也就是调用无参构造方法进行实例化,没有对任何属性的赋值
其次就是bean的初始化操作同上
bean的生命周期详解(自己理解版)
0 条评论
下一页