在Spring上下文中外部注入属性

时间:2014-03-26 17:26:36

标签: java spring properties-file

我的项目有两个xml文件。第一个文件刚加载,一些bean被实例化,调用一些方法给我一个用户名和密码。必须将此用户名和密码发送到第二个xml文件,该文件中配置了异步侦听器。加载上下文后,侦听器就会启动。我想在加载之前将我拥有的用户名和密码传递给这个xml。

1 个答案:

答案 0 :(得分:4)

您可以使用PropertyPlaceholderConfigurer实现此目的。 假设,首先加载springConfigXml1.xml(其中包含以下方法的bean),然后执行setNamePassword方法,然后加载springConfigXml2.xml(具有AsyncListenerClass):

    public void setNamePassword(){
        //some code
        PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
        Properties properties = new Properties();
        properties.setProperty("property.userName", "username");
        properties.setProperty("property.password", "password");
        configurer.setProperties(properties);
                       //Include below line if you have another 
                       //PropertyPlaceholderConfigurer in springConfigXml2.xml       
                        configurer.setIgnoreUnresolvablePlaceholders(true); 
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();
        context.addBeanFactoryPostProcessor(configurer);
        context.setConfigLocation("springConfigXml2.xml");
        context.refresh();
        //some code
    }



    springConfigXml2.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"
           xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
        <bean id="asyncListener" class="com.example.AsyncListenerClass">
            <property name="userName" value="${property.userName}"/>
            <property name="password" value="${property.password}"/>
        </bean>
    </beans>

但是,将为上下文生命设置用户名和密码。