@PostConstruct @PreDestroy
@PostConstruct
是 Java EE(现 Jakarta EE)中的一个注解,用于标记一个方法在对象初始化完成后立即执行。它在 Spring 框架、Java Web 应用等场景中广泛使用,主要用于资源初始化、依赖注入完成后的配置等操作。
1. 基本作用
-
执行时机:
- 在对象实例化(通过构造器创建)并完成依赖注入(如
@Autowired
注入 Bean)后,且在该 Bean 投入使用前执行。 - 仅执行一次,确保资源初始化逻辑只运行一次。
- 在对象实例化(通过构造器创建)并完成依赖注入(如
-
典型场景:
- 初始化资源(如数据库连接、网络客户端)。
- 加载配置文件或缓存数据。
- 验证依赖注入的正确性。
2. 使用条件
-
方法要求:
- 返回类型:必须为
void
。 - 参数:不能有参数。
- 访问修饰符:通常为
public
、protected
或默认(package-private
),但不能是private
(某些容器可能允许,但不推荐)。 - 静态方法:不允许(因静态方法属于类,而非实例)。
- 抛出异常:可以抛出受检异常(如
IOException
)。
- 返回类型:必须为
-
依赖环境:
- 需要 JSR-250 规范支持(Java EE 5+ 或 Jakarta EE)。
- Spring 框架从 2.5 版本开始支持该注解。
@PreDestroy
是 Java EE(现 Jakarta EE)中的一个注解,用于标记一个方法在对象被销毁前执行。它与 @PostConstruct
相对应,主要用于资源释放、清理操作,确保对象在生命周期结束时正确释放占用的资源(如关闭数据库连接、停止线程、释放文件句柄等)。
@PreDestroy
1. 基本作用
-
执行时机:
- 在对象被容器销毁前(如 Spring 容器关闭、Servlet 实例销毁)执行。
- 仅执行一次,确保资源释放逻辑只运行一次。
-
典型场景:
- 关闭数据库连接或网络客户端。
- 停止后台线程或定时器。
- 释放文件锁或临时资源。
2. 使用条件
-
方法要求:
- 返回类型:必须为
void
。 - 参数:不能有参数。
- 访问修饰符:通常为
public
、protected
或默认(package-private
),但不能是private
(某些容器可能允许,但不推荐)。 - 静态方法:不允许(因静态方法属于类,而非实例)。
- 抛出异常:可以抛出受检异常,但建议捕获并记录,避免影响容器销毁流程。
- 返回类型:必须为
-
依赖环境:
- 需要 JSR-250 规范支持(Java EE 5+ 或 Jakarta EE)。
- Spring 框架从 2.5 版本开始支持该注解。