我有两个bean来自同一个类(id1和id2),区别在于ID和一些属性。 在代码中,我调用了getbean(id1)来获取对象。
如何在不重新编译代码的情况下切换到id2?
答案 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");