我在Spring MVC项目中初始化了这个,但是BASE_URL总是空的。在其他三台服务器上它运行正常。这个类和静态变量的初始化是否会发生什么?
BaseClass.java
public final String BASE_URL = SystemConfiguration.restHost;
SystemConfiguration.java
public static String restHost;
public void setRestHost(String restHost) {
SystemConfiguration.restHost = restHost;
}
的applicationContext.xml
<property name="RestHost">
<value>${restHost:https://example.com}</value>
</property>
答案 0 :(得分:3)
毕竟这是Java。静态字段在它们所属的类被加载和初始化时被初始化。
如果在您的应用程序加载应用程序上下文并从BaseClass
bean设置字段之前加载SystemConfiguration
,则BASE_URL
将从null
初始化为SystemConfiguration.restHost
1}}默认情况下也是null
。
你应该考虑改变你的设计。没有理由拥有任何static
字段。 Spring可以将所有配置值作为bean或bean值处理。
答案 1 :(得分:0)
发现它与分配给最终变量的静态变量有关。我们刚刚在代码中直接引用SystemConfiguration.restHost
,一切正常。我假设春季bean在这个服务器上以不同的顺序加载,然后其他工作正常。