@PostConstruct && @PreDestroy
1. 介绍
@PostConstruct注解与@PreDestroy注解都是JSR250规范中提供的注解。
@PostConstruct注解标注的方法可以在创建Bean后在为属性赋值后,初始化Bean之前执行。
@PreDestroy注解标注的方法可以在Bean销毁之前执行。
2. 依赖
如果使用@PostConstruct注解与@PreDestroy注解,则需要在Maven的pom.xml文件中添加如下依赖。
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>2.1.1</version>
</dependency>
3. 场景
使用Spring开发项目的过程中,如果在Bean对象创建完成后,需要对Bean对象中的成员进行一些初始化操作,就可以使用@PostConstruct注解注解实现。
如果在Bean对象销毁之前,对系统中的一些资源进行清理,例如释放占用的资源,释放数据库连接等,就可以使用@PreDestroy注解实现。
4. 源码
@Documented
@Retention (RUNTIME)
@Target(METHOD)
public @interface PostConstruct {
}
@Documented
@Retention (RUNTIME)
@Target(METHOD)
public @interface PreDestroy {
}
5. Demo
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.stereotype.Service;
@Service
public class UserService {
// 构造器
public UserService() {
System.out.println("UserService: 构造方法被调用");
}
// 初始化方法,使用@PostConstruct注解
@PostConstruct
public void init() {
System.out.println("UserService: 初始化方法被调用");
// 可以在这里进行资源的初始化,例如打开数据库连接等
}
// 销毁方法,使用@PreDestroy注解
@PreDestroy
public void destroy() {
System.out.println("UserService: 销毁方法被调用");
// 可以在这里进行资源的释放,例如关闭数据库连接等
}
// 示例业务方法
public void doSomething() {
System.out.println("UserService: 执行某些业务逻辑");
}
}