您的位置:首页 > 编程语言 > Java开发

spring bean的生命周期

2018-01-25 17:20 489 查看
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调用)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: