spring Framework 提供了许多接口,您可以使用它们来自定义 bean 的性质。
生命周期回调
要与容器对 bean 生命周期的管理进行交互,可以实现 SpringInitializingBean和DisposableBean接口。容器要求 afterPropertiesSet()前者和destroy()后者让 bean 在初始化和销毁 bean 时执行某些操作。
在内部,Spring 框架使用BeanPostProcessor实现来处理它可以找到的任何回调接口并调用适当的方法。如果你需要自定义特性或其他生命周期行为 Spring 默认不提供,你可以BeanPostProcessor自己实现一个。
除了初始化和销毁回调之外,Spring 管理的对象还可以实现该Lifecycle接口,以便这些对象可以参与容器自身生命周期驱动的启动和关闭过程。
初始化回调
在容器为 bean 设置了所有必要的属性后,该org.springframework.beans.factory.InitializingBean接口允许 bean 执行初始化工作。该InitializingBean接口指定了一个方法:
void afterPropertiesSet() throws Exception;
我们建议您不要使用该InitializingBean接口,因为它不必要地将代码耦合到 Spring。或者,我们建议使用@PostConstruct注解或指定 POJO 初始化方法。
销毁回调
实现该org.springframework.beans.factory.DisposableBean接口可以让 bean 在包含它的容器被销毁时获得回调。该 DisposableBean接口指定了一个方法:
void destroy() throws Exception;
我们建议您不要使用DisposableBean回调接口,因为它不必要地将代码耦合到 Spring。或者,我们建议使用@PreDestroy注释或指定 bean 定义支持的通用方法
默认初始化和销毁方法
当您编写不使用 Spring 特定InitializingBean和DisposableBean回调接口的初始化和销毁方法回调时,您通常会编写名称为init()、initialize()、dispose()等的方法。理想情况下,此类生命周期回调方法的名称在整个项目中是标准化的,以便所有开发人员使用相同的方法名称并确保一致性。
<beans default-init-method="init">
<bean id="blogService" class="com.something.DefaultBlogService">
<property name="blogDao" ref="blogDao" />
</bean>
</beans>
启动和关闭回调
该Lifecycle接口定义了任何具有自己生命周期要求的对象的基本方法(例如启动和停止某些后台进程):
public interface Lifecycle {
void start();
void stop();
boolean isRunning();
}
任何 Spring 管理的对象都可以实现该Lifecycle接口。然后,当 ApplicationContext自身接收到启动和停止信号时(例如,对于运行时的停止/重新启动场景),它会将这些调用级联到Lifecycle该上下文中定义的所有实现。它通过委托给 a 来做到这一点LifecycleProcessor,如以下清单所示:
public interface LifecycleProcessor extends Lifecycle {
void onRefresh();
void onClose();
}
请注意,LifecycleProcessor它本身就是Lifecycle 接口的扩展。它还添加了另外两种方法来对正在刷新和关闭的上下文做出反应。
ApplicationContextAware和BeanNameAware
当 一个创建一个实现ApplicationContextAware接口的对象实例时,会为该实例提供对该 的引用ApplicationContext`。
当ApplicationContext创建一个实现 BeanNameAware接口的类时,该类被提供了对其关联对象定义中定义的名称的引用。
其他Aware接口
Spring 提供了广泛的Aware回调接口,让 bean 向容器指示它们需要特定的基础设施依赖项。
浙公网安备 33010602011771号