Spring Bean的生命周期--公开版本
2021-06-24 17:49:33 0 举报
Spring Bean生命周期面试这样回答绝对没问题,亲测有效!
作者其他创作
大纲/内容
BeanFactory容器
用户自定义的,应用程序需要的
BeanDefinition对象
反射
xml
初始化需要调用的方法
后置处理器
执行afterPropertiesSet()方法
populateBean
3.开始创建对象(1)首先通过反射的方式实例化对象;(2)使用set方法填充对象属性;(3)调用一些初始化必要的方法;(4)如果实现了aware接口,调用aware接口的方法;(5)调用调用BPP的before;(6)调用调用init-method;(7)调用BPP的after。至此,对象已经创建完成。
调用aware接口的方法
创建对象
容器需要的
Bean对象
实例化
判断是否实现了InitializingBean
BeanPostProcessor
调用BPP的before
加载
set方法
PostProcessor
填充属性
调用init-method
完整流程
调用BPP的after
context.getBean()
createBeanInstance
如果我需要在自定义对象中获取到容器对象怎么办?
注解
抽象接口BeanDefinitionReader读取信息,生成BeanDefinition
销毁
在堆内存中分配空间,对象的属性值都是默认的
扩展实现BeanFactoryPostProcessor当BeanFactory创建完成之后,可以对Factory中的BeanDefinition进行处理,比如值的替换
BeanFactory和FactoryBean的区别
bean
1.BeanDefinitionReader读取xml信息或者注解信息,生成BeanDefinition对象
完整对象
@PostConstruct@Autowired@Value这些注解都是一些实现了BBP接口的类在after中执行的如果需要进行AOP的话,也会在after中执行,会使用jdk或者cglib进行动态代理
执行初始化方法,init-method
BeanFactory
关注公众号[dmg_java]回复[00001]免费领取高清pdf流程图
初始化
handler处理区
2.创建好的BeanDefinition对象会被放入BeanFactory容器中,BeanFactory容器的BeanFactoryPostProcessor会在容器创建完成之后对BeanDefinition进行处理,比如一些值的替换操作
1.BeanDefinitionReader读取xml信息或者注解信息,生成BeanDefinition对象2.创建好的BeanDefinition对象会被放入BeanFactory容器中,BeanFactory容器的BeanFactoryPostProcessor会在容器创建完成之后对BeanDefinition进行处理,比如一些值的替换操作。3.开始创建对象(1)首先通过反射的方式实例化对象;(2)使用set方法填充对象属性;(3)调用一些初始化必要的方法;(4)如果实现了aware接口,调用aware接口的方法(可以简单描述为什么要实现aware接口);(5)调用调用BPP的before;(6)调用调用init-method(可以简单描述init-method做了什么);(7)调用BPP的after(可以简单描述一下after的时候执行了些什么)。至此,对象已经创建完成。4.获得对象,使用对象,销毁对象
进行属性值的设置工作
BeanFactoryPostProcessor
BeanFactory创建对象的时候是一套完整的标准化流程,如果想要创建bean对象的话,那么必须要严格遵循以上的步骤,否则的话无法创建对象。例如,我们现在需要创建一个普通的对象,但是不想走这么复杂的流程,同时想自己定义对象的过程,创建完对象之后,还想将对象交给spring进行管理怎么办?此时就需要使用FactoryBean接口了,因为在此接口中定义了三个方法:isSingleTon();判断当前对象是否是单例getObjectType();返回当前对象的类型getObject();此方法一般需要自己定义实现,自己完全的控制bean的创建流程,不需简要走上述复杂的流程,最简单的创建方式:直接new一个对象
执行定义的init-method方法
根据使用方式分类
完整文字描述
比如我们需要ApplicationContext和BeanFactory那么我们就可以实现ApplicationContextAware和BeanFactoryAwareclass ShareData implements BeanFactoryAware { private BeanFactory beanFactory; @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; }}
4.获得对象,使用对象,销毁对象
解析
通俗点说,就是我们想使用spring内置的某些bean对象的时候,可以实现Aware接口,而不需要我们手动去创建和注入了
0 条评论
下一页