【发布时间】:2013-12-21 03:14:51
【问题描述】:
我正在尝试使用 Spring 来允许我的 Java 类访问属性文件。我已经做了很多谷歌搜索,似乎有几种方法可以做到这一点。我尝试使用其中两种不同的方法,但都失败了。
尝试 1
XML
<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="location" value=classpath:config.properties />
<property name="ignoreUnresolvablePlaceholders" value="true"/>
</bean>
Java
public class App
{
@Autowired
private static Environment env;
public static void main(String[] args)
{
System.out.println(env.getProperty("DatabaseName"));
}
}
尝试 2
XML
<util:properties id="myProperties" location="classpath:config.properties"/>
Java
public class App
{
@Resource(name="myProperties")
private static Properties myProperties;
public static void main(String[] args)
{
System.out.println(myProperties.getProperty("DatabaseName"));
}
}
在这两种情况下,调用“getProperty”方法时都会出现空指针异常。我是 Spring 新手,我猜我错过了一些简单的东西。除了让这些尝试发挥作用之外,我还想知道使用 Spring 公开属性文件的“最佳”方式是什么。
提前感谢您的帮助。
【问题讨论】:
-
Spring 不会自动装配静态成员。 Spring 根本不参与你正在做的事情。
-
显然我走错了路。可以举个例子吗?
-
注解只是元数据。他们自己什么都不做。您必须显式声明并实例化一个
ApplicationContext实现类。 -
@Joe 用例一样,只是替换bean类。
-
@Joe 正确,
PropertySourcesPlaceholderConfigurer是 Spring 3.1 的首选方式。但是,我的答案的其余部分仍然适用,因此您可以复制我的答案的相关部分,并将 bean 声明中的PropertyPlaceholderConfigurer替换为相应的完全限定名称PropertySourcesPlaceholderConfigurer。