如何在Spring beans XML文件中使用属性文件?

时间:2017-04-30 18:41:22

标签: java spring spring-3

我有一些我希望在Spring XML配置文件中提供的属性文件。例如,在hello.xml

<bean id="theFoo" class="learnspring.Foo">
    <property name="color" value="${foo.color}"/>
</bean>

在Java代码中:

ApplicationContext ac = new ClassPathXmlApplicationContext("hello.xml");
File props = new File("path/to/hello.properties");
File moreProps = new File("path/to/more.properties");
// What to do here?
Foo foo = (Foo)ac.getBean("theFoo");
System.out.println(foo.getColor());

hello.properties

foo.color = blue

如何使属性文件可用于Spring对象定义?

更新

我正在移植一些旧的Spring代码。 (版本2.5)它看起来像这样:

XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource(xmlFile));
PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
cfg.setLocations(new Resource[] {
    new ClassPathResource(propsResourcePath),
    new FileSystemResource(propsFile)) });

cfg.postProcessBeanFactory(factory);
new GenericApplicationContext(factory);

此代码已被标记为已弃用,我遇到了其他问题,因此我尝试将其移植到新方式。

2 个答案:

答案 0 :(得分:1)

您可以在PropertyPlaceholderConfigurer的帮助下阅读java代码中的more.properties。不确定为什么你真的需要读作文件对象。

在hello.xml文件中

[sent]

在hello.properties文件中

<!-- Loading all properties files from classpath -->
    <bean id="myProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:hello.properties</value>
                <value>classpath:more.properties</value>
            </list>
        </property>
        <property name="ignoreResourceNotFound" value="true" />
        <property name="ignoreUnresolvablePlaceholders" value="true" />
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    </bean>
    <bean id="theFoo" class="learnspring.Foo">
        <property name="color" value="${foo.color}"/>
        <property name="shape" value="${foo.shape}"/>
    </bean>

在more.properties文件中

 foo.color=blue

在Java代码中

foo.shape=square

答案 1 :(得分:-1)

如果您还想循环遍历bean数据并在jsp上显示其内容。

的hello.xml

<bean id="productManager" class="springapp.service.SimpleProductManager">
    <property name="products">
        <list>
            <ref bean="product1"/>
            <ref bean="product2"/>
            <ref bean="product3"/>
        </list>
    </property>
</bean>

<bean id="product1" class="springapp.domain.Product">
    <property name="description" value="Lamp"/>
    <property name="price" value="5.75"/>
</bean>

<bean id="product2" class="springapp.domain.Product">
    <property name="description" value="Table"/>
    <property name="price" value="75.25"/>
</bean>
...

的hello.jsp

<c:forEach items="${model.products}" var="prod">
  <c:out value="${prod.description}"/>
  $<c:out value="${prod.price}"/>
</c:forEach>

参考:Spring.io