Spring: программно использовать PropertyPlaceHolderConfigurer ни на одном компоненте Singelton Beans - PullRequest
6 голосов
/ 01 марта 2010

Я знаю, что возможна следующая реализация 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">

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

Однако мне кажется, что изменения, внесенные в testBean, будут показаны на всех тестовых компонентах.

Как использовать свойство PropertyPlaceHolderCongfigurer таким образом, чтобы я мог применить его к отдельным экземплярам компонента и иметь доступ к каждому из этих экземпляров?

Надеюсь, вопрос имеет смысл. Любая помощь будет высоко ценится.

1 Ответ

2 голосов
/ 01 марта 2010

По умолчанию бины Spring являются синглетонами, то есть последующие вызовы context.getBean("testBean") вернут тот же экземпляр. Если вы хотите, чтобы они возвращали разные экземпляры, вы должны установить scope = "prototype" в определении компонента:

<bean id="testBean" class="com.spring.ioc.TestClass" scope = "prototype"> 
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...