在春天切换两个豆

时间:2011-03-17 09:13:19

标签: java spring

我有两个bean来自同一个类(id1和id2),区别在于ID和一些属性。 在代码中,我调用了getbean(id1)来获取对象。

如何在不重新编译代码的情况下切换到id2?

3 个答案:

答案 0 :(得分:2)

如果您有两个不同的bean,它们具有不同的属性,这意味着您有两个不同的对象。这意味着你可以像对待不同的对象一样对待它们 -

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

但是,如果你有一个单独的scenerio,你在你的类中加载bean 1用于正常工作,而在你的类中通过JUnit运行bean 2那么你应该有一个不同的方法 -

有两个不同的 applicationContext.xml 文件。首先在代码运行时加载,然后在通过JUNIT运行代码时加载其他(applicationContext-test.xml)。这样,您可以在不更改代码的情况下加载不同的bean。

答案 1 :(得分:1)

这似乎不是好设计,

Spring通常是服务bean,你应该只有一个Bean的实现对象。

那么如果你想这样做的话。

然后在获取bean时从Properties文件中读取bean ID。

答案 2 :(得分:0)

从你的问题来看,我假设你想以编程方式在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");