无法获取Context中加载的外部文件属性

时间:2014-06-12 10:02:42

标签: spring properties-file

我正在使用Spring 3.2.9.FINAL设置一个项目,我只是无法加载我存储在外部文件中的一些属性。这就是我的application-context.xml的样子:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
        http://www.springframework.org/schema/util 
        http://www.springframework.org/schema/util/spring-util-3.2.xsd 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.2.xsd">

    <context:property-placeholder
        location="file:/home/myapp/settings.properties" />

    <bean class="foo.Test">
        <property name="property" value="${test.property}" />
    </bean>

</beans>

这是我的settings.properties文件的内容:

test.property=Hello world

foo.Test类非常简单,只包含String属性。在我的主要方法中,我这样做:

public class App {
    public static void main(String[] args) {
        DefaultListableBeanFactory dlbf = new DefaultListableBeanFactory();
        XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(dlbf);
        reader.loadBeanDefinitions(new ClassPathResource(
                "/application-context.xml", Test.class));
        System.out.println(dlbf.getBean(Test.class).getProperty());
    }
}

这就是我在执行时得到的:

Jun 12, 2014 12:03:38 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [application-context.xml]
${test.property}

我根据SO的答案尝试了几种解决方法,但似乎没有任何效果。我做错了什么?

2 个答案:

答案 0 :(得分:1)

您正在将bean加载到BeanFactory,而您应该使用ApplicationContext

public class App {
    public static void main(String[] args) {
        ApplicationContext ctx d= new ClassPathXmlApplicationContext("application-context.xml");
        System.out.println(ctx.getBean(Test.class).getProperty());
    }
}

有关差异的解释,请参阅the reference guide

答案 1 :(得分:0)

应用程序上下文从spring XML文件加载所有bean,并且不支持选择性延迟加载,但是使用XML bean工厂版本(检查精确的类名)可以选择性地加载bean。请测试一下。