我有一个具体的要求,我应该动态地(在运行时)能够加载和卸载我的Spring IoC容器中的bean类。如何使用类加载器实例化spring bean?
一个bean必须
- 创建
- 破坏
- 重新创建(同一类,同一类的可能的新版本)
我是问题面对的是,因为第1步中的类被加载到系统类加载器中,所以即使在我销毁bean时它仍然存在。所以在第三步中,我得到了旧班级的一个对象,而不是新班级。
所以我的问题的解决方案是加载类MyClassLoader而不是系统类加载器。
所以我的步骤变得
- 创建特定的类加载器
- 使用特定的类加载器
- 设置bean的引用为null,从AppContext
- 设置的类加载器的参考,除去豆创建bean null
使用步骤1和2重新加载bean
我的问题是如何在Spring IoC容器中实现上述方法?
感谢,
问候,
VIMAL
你可以用新的类加载器重新创建spring上下文吗?请记住,重新创建bean不会将它重新注入到现有的bean中,而只要它被引用。还记得父类加载器总是优先于后代。 – mrembisz 2012-03-26 09:20:54
@mrembisz嗨,似乎是一个好主意,在新的类加载器中创建AppContext本身。我会试一试。但是在新的类加载器中创建一个AppContext将确保这个上下文中的所有bean也被加载到同一个类加载器中? – weima 2012-03-26 09:24:18
你应该调用context.setClassLoader(classLoader)来确保。你也想重载的类在classLoader的父类中不可用。 – mrembisz 2012-03-26 10:25:55