@PostConstruct
注解修饰的方法是在 Bean 完成初始化后自动调用的。它是 Java EE 和 Spring 中的一种机制,用于在 Bean 被创建并依赖注入完成后,执行一些初始化的操作。
具体触发时机:
依赖注入完成后:首先,Spring 容器会创建一个对象,并将所有依赖注入到该对象中(通过构造函数、字段或 setter 方法)。
初始化方法调用之前:依赖注入完成后,Spring 会调用带有
@PostConstruct
注解的方法,这通常是做一些初始化工作,比如验证、配置、日志记录等。在 Bean 使用之前:
@PostConstruct
方法在 Spring 容器将 Bean 标记为“可用”之前调用,意味着此时对象已经完全创建并注入了所有依赖,但还没有开始被使用(即对象没有真正被服务或业务逻辑使用)。
使用示例:
假设我们有一个 Spring 类,需要在依赖注入完成后进行一些初始化工作,可能是初始化资源、进行校验或设置某些字段的默认值:
import javax.annotation.PostConstruct;
public class MyService {
private String message;
// 依赖注入的字段
private MyDependency myDependency;
// 构造函数、setter等依赖注入方法
@PostConstruct
public void init() {
// 依赖注入完成后执行的初始化方法
System.out.println("MyService is initialized with message: " + message);
// 进行一些初始化逻辑,比如校验数据或初始化连接等
if (myDependency == null) {
throw new IllegalStateException("myDependency must be set!");
}
}
}
执行顺序:
- 实例化 Bean:Spring 创建
MyService
的实例。 - 依赖注入:Spring 根据配置自动将
MyDependency
注入到MyService
实例中。 - 调用
@PostConstruct
方法:在依赖注入完成后,init
方法被自动调用。 - Bean 可用:
@PostConstruct
方法执行完成后,MyService
Bean 被标记为可以使用。
注意事项:
- 一个类中只能有一个
@PostConstruct
方法:如果类中有多个方法被@PostConstruct
注解,Spring 会抛出异常。 - 仅在 Spring 管理的 Bean 上有效:
@PostConstruct
只会在 Spring 管理的 Bean 上生效,比如通过@Component
、@Service
等注解或 XML 配置方式定义的 Bean。 - 支持与
@PreDestroy
配合使用:@PostConstruct
配合@PreDestroy
注解使用,可以在 Bean 销毁前执行清理工作。
总结:
@PostConstruct
是 Spring 生命周期的一部分,用于在 Bean 完成依赖注入之后、实际使用之前执行初始化工作。它是一个非常重要的注解,尤其是在需要在 Bean 完成所有注入后进行某些设置或验证时非常有用。
不懂的看