@PostConstruct
是 Java 中的一个注解,用于标记一个方法,使其在对象初始化完成后(即依赖注入完成之后)自动执行。它是 JSR-250(Java 规范请求)的一部分,通常用于执行一些初始化逻辑。
主要特点:
-
执行时机:
-
在对象被创建并完成依赖注入(如
@Autowired
、@Resource
等)后调用。 -
在
InitializingBean.afterPropertiesSet()
和自定义的init-method
之前执行。
-
-
用途:
-
初始化数据、加载配置、建立数据库连接等。
-
替代构造函数中的复杂逻辑(因为构造函数执行时依赖注入尚未完成)。
-
-
依赖:
-
需要引入
javax.annotation
包(Java 9+ 可能需要单独引入,如jakarta.annotation-api
)。
-
示例代码:
import javax.annotation.PostConstruct;
@Component
public class MyService {
@Autowired
private Dependency dependency;
@PostConstruct
public void init() {
System.out.println("初始化完成,依赖已注入!");
// 这里可以安全使用 dependency
dependency.doSomething();
}
}
注意事项:
-
方法可以是任意名称,但必须无参且返回
void
。 -
方法不能是
static
的。 -
若方法抛出异常,会导致容器初始化失败(在 Spring 中会中断应用启动)。
对比其他初始化方式:
方式 | 执行顺序 | 备注 |
---|---|---|
@PostConstruct | 最早(依赖注入后立即) | JSR-250 标准 |
InitializingBean | 其次 | Spring 接口,侵入性强 |
init-method | 最后 | XML 或 @Bean(initMethod) 配置 |
常见问题:
-
Java 9+ 中找不到注解:需显式添加依赖:
<dependency> <groupId>jakarta.annotation</groupId> <artifactId>jakarta.annotation-api</artifactId> <version>2.1.1</version> </dependency>
运行 HTML
-
与构造函数的选择:
如果初始化逻辑需要依赖注入的字段,用@PostConstruct
;否则可直接在构造函数中完成。
它是 Spring 和其他 Java EE/ Jakarta EE 容器中常用的生命周期回调注解。