What is the use of Custom Class Loader

懵懂的女人 提交于 2019-11-30 10:42:45

问题


Recently I came accross the java custom class loader api. I found one use over here, kamranzafar's blog I am a bit new to the class loader concept. Can any one explain in detail, what are the different scenarios where we may need it or we should use it?


回答1:


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.



回答2:


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.




回答3:


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.



来源:https://stackoverflow.com/questions/10828863/what-is-the-use-of-custom-class-loader

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