是否有一个类似于PropertyPlaceholderConfigurer的类用于接受XML的Spring?

Gar*_*ryF 8 java xml spring properties

Spring有一个非常方便的便利类,名为PropertyPlaceholderConfigurer,它接受一个标准的.properties文件并将其中的值注入到bean.xml配置中.

有没有人知道一个完全相同的类,并以相同的方式与Spring集成,但接受配置的XML文件.具体来说,我正在考虑Apache digester风格的配置文件.这样做很容易,我只是想知道是否有人.

建议?

too*_*kit 7

我刚试过这个,它应该可以正常工作.

PropertiesPlaceholderConfigurer包含setPropertiesPersister方法,因此您可以使用自己的PropertiesPersister子类.默认的PropertiesPersister已经支持XML格式的属性.

只是为了向您展示完整的代码:

JUnit 4.4测试用例:

package org.nkl;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@ContextConfiguration(locations = { "classpath:/org/nkl/test-config.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
public class PropertyTest {

    @Autowired
    private Bean bean;

    @Test
    public void testPropertyPlaceholderConfigurer() {
        assertNotNull(bean);
        assertEquals("fred", bean.getName());
    }
}
Run Code Online (Sandbox Code Playgroud)

spring配置文件 test-config.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:context="http://www.springframework.org/schema/context"
  xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
">
  <context:property-placeholder 
      location="classpath:/org/nkl/properties.xml" />
  <bean id="bean" class="org.nkl.Bean">
    <property name="name" value="${org.nkl.name}" />
  </bean>
</beans>
Run Code Online (Sandbox Code Playgroud)

XML属性文件properties.xml- 有关用法的说明,请参见此处.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
  <entry key="org.nkl.name">fred</entry>
</properties>
Run Code Online (Sandbox Code Playgroud)

最后是豆子:

package org.nkl;

public class Bean {
    private String name;
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...