java - 如何使用类加载器实例化 spring bean?

标签 java spring inversion-of-control

我有一个特定的要求,我应该能够动态地(在运行时)加载和卸载我的 Spring IoC 容器中的 bean 类。

一个bean需要是

  1. 创建
  2. 销毁
  3. 再次创建(来自同一个类,可能是同一个类的新版本)

我面临的问题是,由于步骤 1 中的类是在系统类加载器中加载的,所以即使我销毁了 bean,它仍然存在。所以在第 3 步中,我得到了旧类的对象,而不是新类。

所以我的问题的解决方案是在 MyClassLoader 而不是系统类加载器中加载类。

所以我的脚步变成了

  1. 创建特定的类加载器
  2. 使用特定的类加载器创建 bean
  3. 将 bean 引用设置为 null 并从 AppContext 中删除 bean
  4. 将类加载器引用设置为空

使用步骤 1 和 2 重新加载 bean

我的问题是如何在 Spring IoC 容器中实现上述方法?

谢谢,

问候,

活力

最佳答案

您可以将您的一些对象移动到将使用专用类加载器重新加载的上下文。为确保使用正确的类加载器,请在调用刷新之前调用 context.setClassLoader(classLoader),或通过 Thread.currentThread().setContextClassLoader(classLoader) 设置线程类加载器。还要记住,如果您要重新加载的类可用于某些公共(public)父类加载器,则不会重新加载它们,因为父类加载器始终优先。

关于java - 如何使用类加载器实例化 spring bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9869365/

相关文章:

java - 如何从纪元毫秒检索季节

java - alwaysMatch 中的无效功能 : unhandledPromptBehavior is type boolean instead of string

Java错误: cannot find symbol list. addPerson(p);

Java - 在 Jboss 中调度任务且无需 EJB

inversion-of-control - 如何用城堡温莎覆盖组件?

走线,连接依赖项

java - Spring boot Maven MultiModule Rest api 调用

java - Spring 集成测试

java - Maven 项目在 mac 中由于缺少tools.jar而无法编译

c# - 使用 Activator.CreateInstance 时解析注入(inject)的实例