@Value("${mf.cashost}")
public static String casHost;
public static String getCasHost() {
if (StringUtils.isEmpty(casHost)) {
//casHost = "http://sso.abc.com.cn/sso/";
casHost = "http://ssotest.abc.com.cn/sso/";
}
return casHost;
}
mf.cashost=http://sso.abc.com.cn/sso/
正常我们想要的getCasHost
的值,肯定是sso.abc.com.cn
,而不是ssotest
,但是如果调用getCasHost
肯定是返回test
的,或者说,casHost最开始进到getCasHost的方法时,就是空的。
关于实例变量与构造方法的初始化顺序问题
@Value("${mf.cashost}")
private String mfCasHost;
private static String casHost;
@PostConstruct
public void init() {
casHost = mfCasHost;
}
public static String getCasHost() {
if (StringUtils.isEmpty(casHost)) {
casHost = "http://ssotest.abc.com.cn/sso/";
}
return casHost;
}
Java中该注解的说明:
@PostConstruct
该注解被用来修饰一个非静态的void()
方法。被@PostConstruct
修饰的方法会在服务器加载Servlet
的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。
通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序:
此时的执行顺序:
java 静态代码块和spring @value等注解注入顺序
原文:https://www.cnblogs.com/pipicai96/p/11718761.html