容器中Bean的生命周期

来源:互联网 发布:css书籍推荐 知乎 编辑:程序博客网 时间:2024/05/17 03:13

Spring中Bean的作用域类型有两种,分别是singleton和prototype。

对于singleton作用域的Bean对象,Spring控制器可以清楚的知道Bean对象何时创建,何时进行被初始化以及何时准备被销毁,Bean对象完全受Spring控制器控制。

对于prototype作用域的Bean对象,Spring控制器只负责相应的Bean对象的创建工作,对于其创建的对象的生死以及多少都不关心,Spring控制器无法管理prototype类型的Bean对象。

1.Bean实例化之后的行为

对于可以管理的singleton类型的Bean对象,Spring控制器可以管理Bean对象实例化之后到对象销毁之前的所有行为。管理Bean对象生命周期的行为主要有两种机制,分别是使用init-method属性和实现InitializingBean接口。

init-method属性指定某个方法在Bean对象中所有依赖注入之后自动执行。使用这种方法不需要将代码与接口耦合在一起,代码污染小。

实现InitializingBean接口的方法要求Bean对象实现InitializingBean接口,该接口提供一个afterPropertiesSet方法在注入后自动执行。此方法在实现InitializingBean接口的类中必须被实现。采用这种方法不需要在xml文件中使用init-method属性进行配置,但是两着并不互斥。

如果两种方法同时使用在同一个Bean对象中,那么Spring控制器将先执行afterPropertiseSet方法,然后再执行init-method属性所关联的方法。

2.Bean销毁之前的行为

相比较于Bean对象实例化之后的行为,Bean销毁之前的行为同样也提供两种机制进行管理,分别是使用destroy-method属性和实现DisposableBean接口。

destroy-method属性所关联的方法在Bean销毁之前自动被执行,同样地,此种控制机制相比较第二种控制机制减少了代码与接口之间的耦合性。

实现DisposableBean接口的机制和实现InitializingBean接口的机制采用了相同的策略,在DisposableBean接口中有一个必须被实现的方法--destroy方法,此方法在实例被销毁之前将被自动调用执行。

同样地,如果两种机制同时被一个Bean对象采用,那么DisposableBean接口中的destroy方法将会先执行,然后再执行destroy-method属性所关联的方法。


0 0
原创粉丝点击