是否可以延迟加载类,可能会在以后动态加载?

chr*_*her 4 java classloader

我想知道,我已经尝试了无数令人费解的搜索术语来确定是否有办法延迟Java中的类加载.我的意思是,类可以在类/构建路径上找到,但我不希望它们在发布时加载.这导致使用错误的类加载器.

我是否可以选择性地延迟或阻止默认类加载器加载某些类/ JAR?

示例(在构建路径上使用第三方jar):

// boilerplate main
JarWrapper apiJar = SpecialJarLoader("api.jar"); // SpecialJarLoader is a proprietary class loader
Class apiClass = apiJar.loadClass("org.company.comm.AConnection"); // runtime failure here due to the class already being loaded
Run Code Online (Sandbox Code Playgroud)

如果我从构建路径中删除Jar,apiClass.getClassLoader()是预期的专有加载器.问题是我无法自由使用"org.company.comm.AConnection"或Jar中的任何其他类(包括IDE的自动完成),因为它实际上并不在构建路径上.

Ita*_*man 5

只有在首次使用类时才会加载类.因此,您的类不会在启动时加载,而是第一次需要来自此类的内容(包括静态方法,类型声明等).因此,默认行为是尽可能延迟加载.

如果要控制加载时间,可以通过ClassLoaer.loadClass()显式加载类.如果你的类包含了一些接口,你可以只在接口上访问代码(从而确保类不被某些依赖链加载)然后加载它(ClassLoader.loadclass())并在实际实例化时实例化它需要这个类的一个实例.