前段时间使用 Spring Boot
在开发一个需求,要求将一些参数做成可配置化的,于是顺理成章地将参数放入 application.properties
文件中。
YD.APP_ID=app20
要获取 application.properties
中的属性值,最简单的方式是使用 @Value
注解
@Value("${YD.APP_ID}")
private String appId;
这个时候我有一个类 App,它有一个构造方法会初始化一些东西,并使用到 appId
这个属性值
@Repository
public class App{
@Value("${YD.APP_ID}")
private String appId;
public App(){
// ...init
print(appId);
}
}
这里会打印 appId
的值为 null
,原因是属性注入发生在构造方法之后。
这种问题其实很困扰人的,如果你对 Java 的类加载机制和创建对象过程比较熟悉的,可能很快就能明白原因在那里。