这里举开源中国上一篇博客为例
Bean在Spring Bean应用上下文中的生命周期 与 Bean工厂中的生命周期
生命周期里面有很多类和方法完全不知道是干什么用的,我是个本科生,理解的生命周期就是初始化完了用,用完了删掉,怎么在Spring里面弄出这么多步骤啊?不明白的步骤我都括号标出来了,谁能稍微解释一下啊?
Bean在Spring Bean应用上下文中的生命周期:
第1步、实例化
第2步、设置属性值
第3步、调用BeanNameAware的setBeanName()方法
第4步、调用BeanFactoryAware的setBeanFactory()方法(设置的BeanFactory对这个bean有什么用?)
第5步、调用ApplicationContextAware方法setApplicationContext()方法(上下文一般传给bean什么东西?能举几个例子么?)
第6步、调用BeanPostProcessor的预初始化方法(before>(预初始化和初始化有什么区别啊,能举例子说下哪些是在预初始化完成的?)
第7步、调用InitializingBean的afterPropertiesSet()方法(这个是干什么的?为什么还要有这步?)
第8步、调用定制的初始化方法
第9步、调用BeanPostProcessor的后初始化方法(after)(初始化后这步又是干什么的?)
第10步、Bean可以使用了
第11步、容器关闭(这个容器是不是ApplicationContext?什么情况下容器会关闭?)
第12步、调用DisposableBean的destory()方法
第13步、调用定制的销毁方法
Bean在Spring Bean工厂中的生命周期:
第1步、实例化
第2步、设置属性值
第3步、调用BeanNameAware的setBeanName()方法
第4步、调用BeanFactoryAware的setBeanFactory()方法
第5步、调用InitializingBean的afterPropertiesSet()方法
第6步、调用调用定制的初始化方法
第7步、Bean可以使用了
第8步、容器关闭
第9步、调用DisposableBean的destory()方法
第10步、调用定制的销毁方法
回答
大部分的看似无用部分是hook点,可以实现用户自定义功能。
BeanFactory持有Bean的定义信息,在一开始的时候通过定位Resource找到Bean的定义信息并载入和注册,让spring知道有这么个东西。然后我们通过getBean就可以获取到相应的实例了。默认scope为singleton的,这种bean在实例化过后,实例被放在一个专门的区域,以后再要用就去那里拿。
ApplicationContext接口通过集成MessageSource、ResourceLoader、ApplicatinEventPublisher接口,在BeanFactory的基础上添加了许多高级容器的特性支持,是一种功能增强版的BeanFactory。
预实例化是控制bean注入的时机,一般来说注入是在第一次getBean的时候触发的,而预实例化的Bean在Ioc容器初始化的时候就预先完成了。
如有理解错误的地方请指正。