正常情况:
一般使用@value("${}")时:

这样写是可以正常从配置文件中获取到值的。
特殊情况一:(给静态变量加载配置文件值)

这种情况给静态变量赋值时启动也不会报错,但是取不到值,取出来的都是null。
使用下set方法进行赋值如下:

这里的set方法不要有static不然依旧取不到,后面的入参随意,这样就可以给静态变量从配置文件获取并赋值了。
但是,原其他路径都为静态变量,在加载时,优先运行,运行结束后才运行非静态set方法,无法拿到预期值
经过一系列的查询发现@PostConstruct这个注解可以解决这个问题。
注解使用场景: 在项目中主要是在Servlet初始化之前加载一些缓存数据等
特点:
-
只有一个非静态方法能使用此注解
-
被注解的方法不得有任何参数
-
被注解的方法返回值必须为void
-
被注解方法不得抛出已检查异常
-
此方法只会被执行一次
例子:
@Component
@PropertySource("classpath:application.properties")
public class JmsConfig {
@Value("${NAME.SERVER.ADDR}")
private String caddr;
@Value("${TOPIC}")
private String cTopic;
public static String NAME_SERVER_ADDR ;
public static String TOPIC;
@PostConstruct
public void readConfig(){
NAME_SERVER_ADDR = caddr;
TOPIC = cTopic;
}
}
这样就达到了在静态变量初始化时就将配置文件中对应的值传入。
暂时这么多,后续发现了其他问题再补充。
本文探讨了在Spring框架中,如何将配置文件中的值注入到静态变量的问题。通常使用@Value注解可以从配置文件中获取值,但在给静态变量赋值时会遇到取值为空的情况。文章详细介绍了通过@PostConstruct注解来解决这一问题,确保在静态变量初始化时就能正确获取配置文件的值。
390

被折叠的 条评论
为什么被折叠?



