SpringFramework核心技术一(IOC:自定义一个bean的本质)

自定义一个bean的本质

本篇讨论如何自定义一个Bean和这个Bean的本质。


一、生命周期回调简介

要与bean生命周期的容器管理进行交互,可以实现Spring InitializingBean和DisposableBean接口。容器要求 afterPropertiesSet()前者和destroy()后者允许bean在初始化和销毁​​bean时执行某些操作。
例如源码中的如下操作:
这里写图片描述

JSR-250 @PostConstruct和@PreDestroy注解通常被认为是在现代Spring应用程序中接收生命周期回调的最佳实践。使用这些注释意味着你的bean没有耦合到Spring特定的接口。有关详细信息,请参阅@PostConstruct和@PreDestroy。
如果您不想使用JSR-250注释,但仍想要移除耦合,请考虑使用init-method和destroy-method对象定义元数据。

例如如下的这些操作:
这里写图片描述

在内部,Spring框架使用BeanPostProcessor实现来处理它可以找到的任何回调接口并调用适当的方法。如果您需要自定义功能或其他生命周期行为,Spring不提供开箱即用功能,您可以自行实施BeanPostProcessor。

除了初始化和销毁​​回调之外,Spring管理对象还可以实现Lifecycle接口,以便这些对象可以参与由容器自身生命周期驱动的启动和关闭过程。
这里写图片描述

二、详解生命周期回调接口

1. 初始化回调

org.springframework.beans.factory.InitializingBean接口允许bean在bean的所有必要属性已由容器设置后执行初始化工作。该InitializingBean接口指定了一种方法:
这里写图片描述

void afterPropertiesSet() throws Exception;

建议您不要使用该InitializingBean接口,因为它不必要地将代码耦合到Spring。或者,使用@PostConstruct注释或指定POJO初始化方法。对于基于XML的配置元数据,您可以使用该init-method属性来指定具有void无参数签名的方法的名称。使用Java配置,您使用的initMethod属性@Bean,请参阅接收生命周期回调。例如,以下内容:推荐

  • 方式一:
  • Xml配置
<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>
  • 实体类
public class ExampleBean {

    public void init() {
        // do some initialization work
    }
}
  • 方式二:不推荐
    Xml配置文件:
<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>

Java代码:

public class AnotherExampleBean implements InitializingBean {
   
   

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

推荐使用方式一,方式一不会将代码耦合到Spring中。

2. 销毁回调

实现org.springframework.beans.factory.DisposableBean接口允许bean在包含它的容器被销毁时获得回调。该 DisposableBean接口指定了一种方法:

void destroy() throws Exception;

建议您不要使用DisposableBean回调接口,因为它不必要地将代码耦合到Spring。或者,使用@PreDestroy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值