跳到主要内容

Spring5中文文档【5】- IOC容器之自定义Bean的性质及 Bean继承

1. 前言

本系列基于最新5.3.10版本,大部分内容copy于官方文档…
官方文档地址

Spring Framework 提供了许多可用于自定义 bean 性质的接口。本节将它们分组如下:

  • 生命周期回调
  • ApplicationContextAware 和 BeanNameAware接口
  • 其他Aware接口

2. 生命周期回调

要让容器对 bean 生命周期的管理进行交互,可以实现 SpringInitializingBean和DisposableBean接口。然后在实现afterPropertiesSet()和destroy()方法,让 bean 在初始化和销毁 bean 时执行某些操作。

JSR-250标准注解@PostConstruct@PreDestroy注解通常被认为是在现代 Spring 应用程序中接收生命周期回调的最佳实践。使用这些注解意味着您的 bean 不会耦合到 Spring 特定的接口。

如果您不想使用 JSR-250 注解但仍想移除耦合,请考虑init-method和destroy-methodbean 标签定义元数据。

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

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

2.1 初始化回调

org.springframework.beans.factory.InitializingBean接口在容器为 bean 设置所有必要的属性后,该接口让 bean 执行初始化工作。该InitializingBean接口指定了一个方法:

void afterPropertiesSet() throws Exception;

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