【发布时间】:2014-08-30 04:57:04
【问题描述】:
我有一个实用程序类,其中我有一种方法需要用户名和密码才能连接其他 url。我需要将该用户名保存在属性文件中,以便我可以随时更改它。但是当我在静态方法(作为实用程序类)中使用它时,问题是它显示为空。(即它无法从属性文件中读取)。
但是当我在其他一些控制器中检查这些值时,它们就会到达那里。 所以我的问题是如何读取静态字段中的属性值
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:/myservice_detaults.properties</value>
<value>classpath*:/log4j.properties</value>
</list>
</property>
</bean>
//在Utitlity类代码中
@Value("${app.username}")
static String userName;
public static connectToUrl(){
//use userName
//userName showing null
}
【问题讨论】:
-
你的实用程序类是如何加载/注入的?
-
我的实用程序类是普通类而不是弹簧类,并且像普通静态调用一样调用 connectToUrl
-
如果你的实用程序类没有被spring上下文加载,你不能在其中注入参数。但是,您仍然可以使用@AmitChotaliya 提出的解决方案。 Spring 的一个好的做法是使用由 spring 上下文加载的单例 bean,而不是实用程序类中的静态方法。
-
@superbob 谢谢,我猜 AmitChotaliya 提供的解决方案应该可以解决我的问题。我会试试。但是你能解释一下你的观点吗>>“Spring的一个好习惯是使用由spring上下文加载的单例bean而不是实用程序类中的静态方法。”..任何链接了解更多信息
-
这有很多原因,但至少,您可以正确初始化
@Value("${app.username}")属性,而无需做任何特别的事情。如果你想要一些链接,这个问题的第二个答案可以给你更多的“论据”stackoverflow.com/questions/7270681/…。根据我自己的经验,仅当我不需要初始化来使用它们(这不是你的情况)时,我才在实用程序类上使用静态方法。否则,我使用弹簧豆。
标签: java spring spring-mvc properties