Переключение между двумя бобами весной - PullRequest
1 голос
/ 17 марта 2011

У меня есть два bean-компонента одного класса (id1 и id2), разница в идентификаторах и некоторых свойствах. В коде я вызвал getbean (id1), чтобы получить объект.

Как я могу переключиться на id2 без перекомпиляции кода?

Ответы [ 3 ]

2 голосов
/ 17 марта 2011

Если у вас два разных компонента с разными свойствами, это значит, что у вас два разных объекта. Это означает, что вы относитесь к ним так же, как к обычным объектам -

BeanClass b1 = (BeanClass) ctx.getBean("id1");
BeanClass b2 = (BeanClass) ctx.getBean("id2");

Однако если у вас есть отдельный сценарий, где вы загружаете bean 1 в своем классе для нормальной работы и bean 2 в своем классе, когда вы запускаете его через JUnit, тогда у вас должен быть совершенно другой подход -

Имеется два разных applicationContext.xml файла. Первый загружается, когда ваш код выполняется, а затем другой (applicationContext-test.xml) загружается, когда вы запускаете код через JUNIT. Таким образом, вы можете загружать различные компоненты без изменения кода.

1 голос
/ 17 марта 2011

Это не кажется хорошим дизайном,

Обычно Spring - это служебные бины, у вас должен быть только один объект реализации Bean.

хорошо, а также, если вы хотите это сделать.

, затем читайте идентификатор компонента из файла Properties при получении компонента.

0 голосов
/ 17 марта 2011

Исходя из вашего вопроса, я предполагаю, что вы хотите переключаться между экземплярами bean-компонентов программно ....

При следующей настройке:

<bean id="instance1" class="my.bean.A">
    <property name="property_B">
        <ref local="B"/>
    </property>
</bean>


<bean id="instance2" class="my.bean.A">
    <property name="property_B">
        <ref local="B"/>
    </property>
</bean>

затем в вашем коде вы можете переключаться между ними, используя ApplicationContext ... (Это код Spring 2.x)

    ApplicationContext ctx = new FileSystemXmlApplicationContext(
            "my-XML-Config-File-Above.xml");

    A instance1 = (A) ctx.getBean("instance1");

    A instance2 = (A) ctx.getBean("instance2");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...