1、@PostConstruct注解
1.1 介绍
@PostConstruct
是 Java EE/Jakarta EE 中的一个注解,用于标记一个方法在依赖注入完成后执行初始化操作。它通常与 Spring 框架一起使用,适用于需要在对象初始化时执行特定逻辑的场景。
- 初始化方法:标注的方法会在以下两个操作完成后被调用:
- 依赖注入(DI)完成:Spring 容器完成对 Bean 的属性注入(如 @Autowired、@Value 等)。
- Bean 实例化:Bean 对象被创建后。
- 执行时机: 是 Bean 生命周期中的一个关键步骤,通常在 @Autowired 或其他注入方式完成后执行,但早于 @PreDestroy 注解的销毁方法。
1.2 用法
-
无参数且无返回值:被标注的方法必须是
void
类型且无参数。// 正确 @PostConstruct public void init() { ... }
-
不抛出受检异常:方法不能声明抛出受检异常(checked exception),否则会抛出
BeanCreationException
。// 以下方法是错误的! @PostConstruct public void init() throws IOException { ... }
-
实例方法:只能标注在实例方法上,不能用于静态方法或字段。
-
唯一性:一个 Bean 中只能有一个
@PostConstruct
方法,否则会引发冲突。
public class MyService {
@Autowired
private DemoRepository demoRepository;
@PostConstruct
public void init() {
// 在依赖注入完成后执行的初始化逻辑
System.out.println("DemoRepository is initialized: " + demoRepository);
// 可在此处进行数据库连接或其他初始化操作
}
}
1.3 场景
- 资源初始化:例如建立数据库连接、初始化缓存、加载配置等。
- 依赖验证:检查注入的依赖是否合法。
- 状态初始化:设置 Bean 的初始状态。
2、InitializingBean接口
2.1 介绍
InitializingBean 是 Spring 中的一个接口,用在 Bean 初始化后执行自定义逻辑。它只提供了一个 afterPropertiesSet()
方法。
该方法在以下时机被 Spring 容器自动调用:
- 属性注入完成后(即所有通过
setter
方法或构造函数注入的属性已设置完毕)。 - Bean 初始化阶段的最后一步(在调用
@PostConstruct
注解的方法之后,如果同时存在的话)。
2.2 用法
@Service
@Slf4j
public class PlatformCommunicationServiceImpl implements InitializingBean {
@Override
public void afterPropertiesSet() {
syncPlatformDataInfo();
log.info("执行了afterPropertiesSet方法");
}
}