应用场景
springboot日常开发中,会遇到静态方法需要加载配置文件信息这样的需求,
我们一般就会使用@Value注解和@ConfigurationProperties注解来加载配置的信息;
思路理清
<p>
1.@Value(需要配合@Component),该注解的执行在java运行初始化的最后的,所以不符合使用条件,感兴趣的 同学看看java初始化等博客.
2.@ConfigurationProperties,该注解初始化的时机是,凡是引用到该类的就会触发该注解,所以他符合我们的使用要求.
例如使用@ConfigurationProperties,贴下错误的代码,
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
private String host;
private String port;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
}
但是该类文件无法在static方法中使用,所以我们又会想到使用如下办法,全部使用静态变量,静态方法,贴下错误的代码
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
private static String host;
private static String port;
public static String getHost() {
return host;
}
public static void setHost(String host) {
RedisProperties.host = host;
}
public static String getPort() {
return port;
}
public static void setPort(String port) {
RedisProperties.port = port;
}
}
貌似没有问题了,但是项目运行后发现,host、port都是 null;
这是因为@ConfigurationProperties只会调用 非静态的set方法,所以我们稍微做一下改动,set方法都换成非静态的就可以了,贴下正确的代码:
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
private static String host;
private static int port;
public static String getHost() {
return host;
}
public void setHost(String host) {
RedisProperties.host = host;
}
public static int getPort() {
return port;
}
public void setPort(int port) {
RedisProperties.port = port;
}
}
如此一来,就完成了我们想要的功能,感谢各位小伙伴!
网友评论