spring bean的生命周期
Posted 一梦三十载
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring bean的生命周期相关的知识,希望对你有一定的参考价值。
Spring框架中,一旦把一个Bean纳入Spring IOC容器之中,这个Bean的生命周期就会交由容器进行管理,一般担当管理角色的是BeanFactory或者ApplicationContext:
1、容器寻找bean的定义并实例化
2、使用依赖注入,Spring按照Bean定义信息配置Bean所有属性
3、如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,此处传递的就是Spring配置文件中Bean的id值
4、如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(BeanFactory)传递的是Spring工厂自身(可以用这个方式来获取其它Bean,只需在Spring配置文件中配置一个普通的Bean就可以);
5、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法
6、如果Bean类已实现InitializingBean接口,则执行他的afterProPertiesSet()方法
7、如果这个Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法
8、如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法、;
注:以上工作完成以后就可以应用这个Bean了,那这个Bean是一个Singleton的,所以一般情况下我们调用同一个id的Bean会是在内容地址相同的实例,当然在Spring配置文件中也可以配置非Singleton。
9、当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用那个其实现的destroy()方法;
10、最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。
BeanPostProcessor接口:
spring容器完成Bean的实例化、配置和其他的初始化前后添加一些自己的逻辑处理,我们可以定义一个或者多个BeanPostProcessor接口的实现,然后注册到容器中。
InitializingBean接口:
位于spring beans中,它只提供一个方法afterPropertiesSet(),当你实现了该方法后,spring就会对你提供框架级的支持:当你通过sring容器生产出实现了该接口的类的实例后,它就会调用afterPropertiesSet方法,通过这个方法,你可以检查你的bean是否正确地被初始化了.(也可以用init-method方法.这两种方式可以同时使用,调用的顺序为先InitializingBean 后init-method调用)
以上是关于spring bean的生命周期的主要内容,如果未能解决你的问题,请参考以下文章