八、Spring Bean生命周期

 

在这篇文章中我们开始学习Bean的生命周期相关的知识,整个Bean的生命周期可以分为以下几个阶段:
1)实例化(得到一个还没有经过属性注入跟初始化的对象)
2)属性注入(得到一个经过了属性注入但还没有初始化的对象)
3)初始化(得到一个经过了初始化但还没有经过AOP的对象,AOP会在后置处理器中执行)
4)销毁

生命周期回调
1、Bean初始化回调
实现初始化回调方法,有以下三种形式

1)实现InitializingBean接口
如下:

public class AnotherExampleBean implements InitializingBean {

    public void afterPropertiesSet() {
        // do some initialization work
    }
}

2)使用Bean标签中的init-method属性
配置如下:

<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>

public class ExampleBean {

    public void init() {
        // do some initialization work
    }
}

3)使用@PostConstruct注解
配置如下:

public class ExampleBean {
    @PostConstruct
    public void init() {
        // do some initialization work
    }
}

2、Bean销毁回调
实现销毁回调方法,有以下三种形式

1)实现DisposableBean接口
public class AnotherExampleBean implements DisposableBean {

    public void destroy() {
        // do some destruction work (like releasing pooled connections)
    }
}

2)使用Bean标签中的destroy-method属性
<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/>

public class ExampleBean {

    public void cleanup() {
        // do some destruction work (like releasing pooled connections)
    }
}

3)使用@PreDestroy注解
public class ExampleBean {
    @PreDestroy
    public void cleanup() {
        // do some destruction work (like releasing pooled connections)
    }
}

3、配置默认的初始化及销毁方法
我们可以通过如下这种配置,为多个Bean同时指定初始化或销毁方法
<beans default-init-method="init" default-destroy-method="destory">
    <bean id="blogService" class="com.something.DefaultBlogService">
        <property name="blogDao" ref="blogDao" />
    </bean>
</beans>

在上面的XML配置中,Spring会将所有处于beans标签下的Bean的初始化方法名默认为init,销毁方法名默认为destory。

但是如果我们同时在bean标签中也指定了init-method属性,那么默认的配置将会被覆盖。

4、执行顺序
如果我们在配置中同时让一个Bean实现了回调接口,又在Bean标签中指定了初始化方法,还进行了
@PostContruct注解的配置的话,那么它们的执行顺序如下:
被@PostConstruct所标记的方法
InitializingBean 接口中的afterPropertiesSet() 方法
Bean标签中的 init()方法

对于销毁方法执行顺序如下:
被@PreDestroy所标记的方法
destroy() DisposableBean 回调接口中的destroy()方法
Bean标签中的 destroy()方法

我们可以总结如下:
注解的优先级 > 实现接口的优先级 > XML配置的优先级

同时我们需要注意的是,官网推荐我们使用注解的形式来定义生命周期回调方法,这是因为相比于实现接口,采用注解这种方式我们的代码跟Spring框架本身的耦合度更加低。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值