@PostConstruct
注解是 Java EE 5 引入的,并在 Java EE 6 中成为 javax.annotation 包的一部分。它用于标记一个在依赖关系注入完成后需要被自动调用的方法。这个注解通常用在基于依赖注入(DI)的框架中,如 Spring,以及 Java EE 的 EJB(Enterprise JavaBeans)组件。
当你在一个类的方法上使用 @PostConstruct
注解时,你告诉容器(如 Spring 容器或 EJB 容器)在类的实例被创建并且所有依赖项都被注入之后,自动调用这个方法。这通常用于执行初始化代码,比如启动资源、检查配置或执行其他需要在对象完全构造和配置之后立即进行的任务。
以下是一个使用 @PostConstruct
注解的简单示例:
import javax.annotation.PostConstruct;
import javax.inject.Inject;
public class MyBean {
@Inject
private SomeService someService; // 假设这是一个被注入的依赖
@PostConstruct
public void init() {
// 这个方法将在依赖注入完成后被自动调用
someService.performSetup(); // 例如,进行一些初始化工作
System.out.println("MyBean has been initialized!");
}
// 其他方法...
}
在这个例子中,SomeService
是一个被注入的依赖项,而 init
方法被标记为 @PostConstruct
。因此,当 MyBean
的实例被创建并且 someService
被注入之后,init
方法将被自动调用。
需要注意的是,@PostConstruct
方法必须满足以下条件:
- 方法不能有任何参数。
- 方法的返回类型必须是
void
。 - 方法不能抛出已检查异常。
- 方法不能是静态的。
- 它可以是
public
、protected
、package
(默认)访问级别或private
,但通常建议至少为protected
或public
,以便在子类(如果有的话)中也可以访问。 - 在类的生命周期中,
@PostConstruct
方法只能被调用一次。
从 Java 9 开始,javax.annotation
API 被从 JDK 中移除,并转移到了外部维护的 javax.annotation-api
中。因此,如果你在使用 Java 9 或更高版本,并且想要使用 @PostConstruct
注解,你需要确保你的项目依赖中包含了 javax.annotation-api
。