Spring:以编程方式在非Singleton Beans上使用PropertyPlaceHolderConfigurer

时间:2010-03-01 15:47:45

标签: java spring properties

我知道PropertyPlaceHolderConfigurer的以下实现是可能的:

public class SpringStart {
   public static void main(String[] args) throws Exception {
     PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
     Properties properties = new Properties();
     properties.setProperty("first.prop", "first value");
     properties.setProperty("second.prop", "second value");
     configurer.setProperties(properties);

     ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();
     context.addBeanFactoryPostProcessor(configurer);

     context.setConfigLocation("spring-config.xml");
     context.refresh();

     TestClass testClass = (TestClass)context.getBean("testBean");
     System.out.println(testClass.getFirst());
     System.out.println(testClass.getSecond());
  }}

在配置文件中使用:

<?xml version="1.0" encoding="UTF-8"?>

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd“&gt;

<bean id="testBean" class="com.spring.ioc.TestClass">
    <property name="first" value="${first.prop}"/>
    <property name="second" value="${second.prop}"/>
</bean>

但是,我认为对testBean所做的更改将显示在所有测试bean上。

如何使用propertyPlaceHolderCongfigurer以便将其应用于bean的各个实例,并且可以访问每个实例?

我希望这个问题有道理。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

默认情况下,Spring bean是单例,即对context.getBean("testBean")的后续调用将返回相同的实例。如果您希望它们返回不同的实例,则应在bean定义上设置scope = "prototype"

<bean id="testBean" class="com.spring.ioc.TestClass" scope = "prototype"> 
...