Custom Class Loader有什么用?

时间:2012-05-31 07:02:33

标签: java classloader

最近我遇到了java自定义类加载器api。我在这里发现了一个用途,kamranzafar's blog 我对类加载器概念有点新意。任何人都可以详细解释,我们可能需要它的不同场景是什么,或者我们应该使用它?

3 个答案:

答案 0 :(得分:27)

自定义类加载器在由多个模块/应用程序组成的大型体系结构中非常有用。以下是自定义类加载器的优点:

  • 提供模块化架构允许定义允许模块化架构的多个类加载器。
  • 避免冲突清楚地在类加载器中定义类的范围。
  • 支持版本控制支持不同模块在同一个VM中的不同版本的类。
  • 更好的内存管理可以删除未使用的模块,卸载该模块使用的类,从而清理内存。
  • 从任何地方加载类可以从任何地方加载类,例如,数据库,网络,甚至可以动态定义
  • 动态添加资源或类以上所有功能都允许您动态添加类或资源。
  • 运行时重新加载已修改的类允许您通过为包含已修改的类的实际类加载器创建子类加载器来重新加载类或类运行时。

答案 1 :(得分:12)

主要用途是在应用程序服务器中,以便它们可以运行两个应用程序而不会使类发生冲突。即如果应用程序1具有与应用程序2同名的类,则自定义类加载器应用程序1将加载其类,应用程序2将加载其类。

此外,如果类由自定义类加载器加载,则可以从JVM卸载该类。在应用程序服务器中再次有用。

另一种用途是用于检测 - 一种进行面向方面编程或使用一些持久性API的方法。使用自定义类加载器,您可以在将已加载的类传递给正在运行的应用程序之前向其添加行为。

答案 2 :(得分:2)

Java类加载器的功能与名称相同:将类加载到内存中以便可以使用它们。

类也与加载它们的ClassLoader链接。

自定义类加载器因此开辟了各种有趣的可能性:

  • 使用不同的类加载器加载同一类的多个版本(例如,解决可能的版本控制问题)
  • 在运行时动态加载和卸载类
  • 生成新类(例如Clojure等JVM语言使用各种类加载技巧生成新的编译类以在运行时表示Clojure函数)
  • 从非标准来源加载课程

普通的Java应用程序通常不需要担心类加载器。但是,如果您正在编写需要托管其他代码的框架或平台,那么它们就变得更加重要/相关。