如何在Spring ioc容器中进行运行时bean部署并销毁bean?

时间:2012-03-22 06:50:13

标签: java spring inversion-of-control containers

我有一个应用程序,其ClassPathXMLApplicationContext已从spring xml文件中加载了一些bean。 我想在运行时添加一个bean。所以我创建了另一个ClassPathXMLApplicationContext实例,它从新的xml文件中读取新的bean定义。现在我有两个appContexts。

我的问题是:如何将bean从新上下文复制到旧上下文?是否有必要复制?我只是合并这两个上下文?是否有合并的API?

后来我想取消部署bean的运行时。我还希望classloader在删除bean时卸载bean类。

如何从ApplicationContext中删除bean并卸载bean类。

谢谢, 问候, VIMAL

1 个答案:

答案 0 :(得分:0)

您不需要ClassPathXMLAplicationContext的第二个实例。我想这会对你有所帮助:

ApplicationContext context = new ClassPathXmlApplicationContext("Spring-Module.xml");
Product myProduct = (Product) context.getBean("Batery");
//when you want to change the bean with another
myProduct = (Product) context.getBean("CD-RW");

在XML文件中,你需要两个bean,其中“Batery”可以用你想要的东西初始化,但是“CD-RW”不能用构造函数初始化。以下是setter initialize的示例:

<bean id="Batery" class="com.seller.springtest1.Battery">
    <property name="name" value="AAA" />
    <property name="price" value="2.5" />
</bean>

<bean id="CD-RW" class="com.seller.springtest1.Disc">
    <property name="name" value="CD-RW" />
    <property name="price" value="1.5" />
</bean>

如果您有特殊需求(保留myProduct参考时)我可以做myProduct = null

我没有得到关于删除的问题(这是垃圾收集器功能)