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 向容器指示它们需要特定的基础设施依赖项。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY