@PostConstruct
是Java EE
(现在称为Jakarta EE
)和Spring框架
中用于标注初始化方法的一个注解。
当一个bean被容器实例化并且所有的依赖注入完成后,该注解标记的方法将会在bean正式投入使用之前由容器自动调用。
Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法) -> bean被使用
@PostConstruct
用来修饰 非静态的void()方法
Java EE 使用 @PostConstruct
注解来实现bean的初始化
Spring框架中,使用 InitializingBean 接口
或 @PostConstruct
注解来实现bean的初始化
使用样例
给静态属性赋值
@Component
public class PageUtils {
private static boolean isQueryTotalCount; // 每次查询DB时,是否进行count查询
@Value("${page-helper.count-total-or-not:true}")
private boolean isQueryTotalFromConfig;
@PostConstruct
private void init() {
isQueryTotalCount = isQueryTotalFromConfig;
}
public static boolean isQueryTotalCount() {
return isQueryTotalCount;
}
}
在Spring框架中使用 @PostConstruct 注解进行数据库连接初始化和配置加载
import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
@Configuration
public class DatabaseConfig {
private DataSource dataSource;
@Autowired
public void setProperties(AppProperties appProperties) {
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName(appProperties.getDatabaseDriver());
ds.setUrl(appProperties.getDatabaseUrl());
ds.setUsername(appProperties.getDatabaseUsername());
ds.setPassword(appProperties.getDatabasePassword());
this.dataSource = ds;
}
// 这个方法会在设置完数据源属性后被调用
@PostConstruct
public void initDatabaseConnection() {
System.out.println("Initializing the database connection...");
// 这里可以添加一些额外的数据库连接初始化逻辑,比如验证连接、执行DDL语句等
}
// 提供给其他组件使用的DataSource
public DataSource getDataSource() {
return dataSource;
}
}