What is the use of Custom Class Loader

冷暖自知 提交于 2019-11-29 21:06:08

Custom class loaders are useful in larger architectures consisting of several module/applications. Here are the advantages of the custom class loader:

  • Provides Modular architecture Allows to define multiple class loader allowing modular architecture.
  • Avoiding conflicts Clearly defines the scope of the class to within the class loader.
  • Support Versioning Supports different versions of class within same VM for different modules.
  • Better Memory Management Unused modules can be removed which unloads the classes used by that module, which cleans up memory.
  • Load classes from anywhere Classes can be loaded from anywhere, for ex, Database, Networks, or even define it on the fly.
  • Add resources or classes dynamically All the above features allows you add classes or resources dynamically.
  • Runtime Reloading Modified Classes Allows you to reload a class or classes runtime by creating a child class loader to the actual class loader, which contains the modified classes.

The primary use is in Application servers so that they can run two applications and not have the classes conflict. i.e. if application 1 has a class with the same name as application 2, with a custom class loader application 1 will load its class and application 2 will load its class.

Also if a class is loaded by a custom class loader it is possible to unload that class from the JVM. Again useful in application servers.

Another use would be for instrumentation - One way of doing aspect oriented programming or when using some persistence API's. With a custom classloader you can add behaviour to the loaded classes before they are passed over to the running application.

Java class loaders do pretty much what the name suggests: load classes into memory so that they can be used.

Classes are also linked with the ClassLoader that loaded them.

Custom class loaders therefore open up a variety of interesting possibilities:

  • Loading multiple versions of the same class with different classloaders (e.g. to resolve possible versioning conficts for example)
  • Loading and unloading classes dynamically at runtime
  • Generating new classes (e.g. JVM languages like Clojure use various classloading tricks to generate new compiled classes to represent Clojure functions at runtime)
  • Loading classes from non-standard sources

Normal Java applications don't usually need to worry about classloaders. But if you are writing a framework or platform that needs to host other code then they become much more important / relevant.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!