2010-03-01 2 views
6

Я знаю, что следующая реализация PropertyPlaceHolderConfigurer возможно:Spring: Программным использовать PropertyPlaceHolderConfigurer ни на одном Singelton Фасоль

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, будут показаны на всех тестовых компонентах.

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

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

ответ

2

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

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

Перед тем, как отпраздновать я просто хочу, чтобы подтвердить, что нажатие на кнопку context.refresh обыкновение обновлять прошлые экземпляры этого боба? – Babyangle86

+0

Да, это не так. – axtavt

+0

Блестящий. Благодарю. – Babyangle86

Смежные вопросы