Spring @PostConstruct 和 @PreDestroy

本文介绍了在Spring框架中管理Bean生命周期的三种方式:使用@PostConstruct和@PreDestroy注解、XML配置中的init-method和destroy-method属性,以及实现InitializingBean和DisposableBean接口。并通过示例展示了如何使用@PostConstruct进行Bean初始化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于在spring  容器初始化 bean 和销毁前所做的操作定义方式有三种:

第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作

第二种是:通过 在xml中定义init-method 和  destory-method方法

第三种是: 通过bean实现InitializingBean和 DisposableBean接口


下面演示通过  @PostConstruct 和 @PreDestory

@Component
public class CacheTask {
	
	/**
	  * 通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
	  *
	 */
	@PostConstruct
	public void initData() {
		System.out.println("11111111111");
	}

}
项目启动会打印
11111111111



### @PostConstruct @PreDestroy 注解的用法及区别 #### 一、@PostConstruct 的功能与使用场景 `@PostConstruct` 是 Java 提供的一个标准注解,通常被用来定义 Bean 初始化完成后的回调方法。当 Spring 容器创建了一个 Bean 并完成了依赖注入之后,会自动调用标记有 `@PostConstruct` 的方法[^1]。 此注解的主要用途是在对象实例化并装配完成后执行一些额外的操作,比如资源加载、配置初始化或者状态校验等操作。需要注意的是,该方法必须是非静态的,并且不能带有任何参数[^2]。 ```java import javax.annotation.PostConstruct; public class ExampleService { private String message; public ExampleService(String message) { this.message = message; } @PostConstruct public void init() { System.out.println("Initializing bean with message: " + message); } } ``` #### 二、@PreDestroy 的功能与使用场景 相对应于 `@PostConstruct`,`@PreDestroy` 则是用来标注在 Bean 销毁前需要执行的方法上。它允许开发者清理资源或保存数据到持久存储中,确保程序退出时不会留下未处理的任务或泄露资源。 同样地,这个方法也应该是无参形式,并且由容器负责在其生命周期结束之前触发调用。 ```java import javax.annotation.PreDestroy; public class CleanupService { @PreDestroy public void cleanup() { System.out.println("Cleaning up resources..."); } } ``` #### 三、两者之间的主要差异 - **执行时机**:`@PostConstruct` 方法会在构造函数执行完毕以及属性设置好以后立即运行;而 `@PreDestroy` 方法则是在 Bean 被移除出 IoC 容器之前的瞬间被执行。 - **适用范围**:虽然它们都可以应用于任意类中的公共/受保护/私有的非静态方法之上,但是只有那些被声明为 Spring 管理下的 Beans 才能真正享受到这两个注解带来的便利效果。 #### 四、Spring 实现机制探讨 对于如何支持上述两个 JSR-250 规范内的注解,Spring内部通过 CommonAnnotationBeanPostProcessor 来识别处理这些特殊的 Lifecycle Callbacks 。这意味着如果希望项目能够正常使用此类特性,则需确保已注册相应的处理器组件至上下文中。 ```xml <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东境物语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值