繁体   English   中英

如何使用类加载器实例化Spring bean?

[英]how to instantiate a spring bean using a classloader?

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

一个豆需要

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

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

因此,解决我的问题的方法是在MyClassLoader中加载类,而不是系统类加载器。

所以我的脚步变成

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

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

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

谢谢,

问候,

重要的

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

JRebel也许是一个解决方案?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM