@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. 源码
java">@Documented
@Retention (RUNTIME)
@Target(METHOD)
public @interface PostConstruct {
}
java">@Documented
@Retention (RUNTIME)
@Target(METHOD)
public @interface PreDestroy {
}
5. Demo
java">import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.stereotype.Service;@Service
public class UserService {// 构造器public UserService() {System.out.println("UserService: 构造方法被调用");}// 初始化方法,使用@PostConstruct注解@PostConstructpublic void init() {System.out.println("UserService: 初始化方法被调用");// 可以在这里进行资源的初始化,例如打开数据库连接等}// 销毁方法,使用@PreDestroy注解@PreDestroypublic void destroy() {System.out.println("UserService: 销毁方法被调用");// 可以在这里进行资源的释放,例如关闭数据库连接等}// 示例业务方法public void doSomething() {System.out.println("UserService: 执行某些业务逻辑");}
}