草庐IT

java - 需要一个 Java 系统专用的类加载器

我想找到或创建一个Java类加载器,它只加载系统类,不包括应用程序定义的类路径上的任何类。我的目标是使用该类加载器构建一个从特定JAR文件加载的类加载器,使用仅限系统的类加载器解析系统类,但不会用我的应用程序定义的任何类污染JAR文件中的类。到目前为止,我还没有找到任何方法来创建既不使用私有(private)API也不对Java实现做出假设的仅限系统的类加载器。请参阅下面的代码,该代码适用于我当前的环境,但做出了不受欢迎的假设。如果没有办法创建一个实现独立的系统专用类加载器,有没有理由不这样做?我想做的事是个坏主意吗?privateClassLoadercreateJarClassLo

【JVM类加载】类的初始化和类加载器双亲委托机制

以此递进,先加载test9调用子类,先初始化父类,类的初始化7中之一。有两种类型的类加载器java虚拟机自带的加载器根类加载器(Bootstrap)扩展类加载器(Extension)系统(应用)类加载器(System)(2,3都属于Launcher类的内部类)用户自定义的类加载器java.lang.ClassLoader的子类。用户可以定制类的加载方式。包括自定义类加载器在构造的时候在构造方法中传入了一个父类加载。类的加载器并不需要等到某个类被“首次主动使用”时再加载它(个人理解加载不一定初始化,初始化一定加载)。类的加载jvm规范允许类加载器在预料某个类将要被使用时就预先加载他,如果在预先加

java - 让 JVM 使用我自己的类加载器

我编写了自己的类加载器。我需要使用我的类加载器加载我所有的类。我已将以下内容传递给VM:-Djava.system.class.loader=MyClassLoader只有我的包中第一个引用的类正在使用我的类加载器加载。我的包中的其他类正在使用AppClassLoader加载。这是MyClassLoader的样子:importjava.io.IOException;importjava.io.InputStream;importjava.net.URL;importjava.util.Enumeration;publicclassMyClassLoaderextendsClassLoa

java - 是否可以将 "reset"设为类加载器?

我必须多次从某个JAR中动态加载同名但实现不同的类。我正在创建一个评估器后端,我必须动态加载类并测试它们。测试是实例化应测试的类的JUnit类,这是一个简单的示例:packageevaluator.tests;importstaticorg.junit.Assert.*;importorg.junit.*;importevaluator.tested.*;publicclassKTest{privateKtested;@Beforepublicvoidsetup(){tested=newK();}@TestpublicvoidreturnsTrueTest(){assertTrue(t

java - Class 类的实例是否保证每个类加载器都是单例?

那么以这种方式检查类是否相等是否有效:if(object.getClass()==anotherObject.getClass()){}可能答案是肯定的,因为Class类没有覆盖equals()所以它看起来像Object.equals()适用于Class相等。但是,如果这在其他地方有记录,我会很感兴趣。谢谢。 最佳答案 引用JLSSection12.2:Well-behavedclassloadersmaintaintheseproperties:Giventhesamename,agoodclassloadershouldalwa

java - OneJar 和动态类加载

我们目前正在调查OneJar在我们的应用程序中的使用(出于多种原因),但我们的应用程序使用了许多自定义URLClassloader来加载应用程序扩展。当捆绑为“OneJar”Jar时,我们会得到ClassNotFound异常。有问题的类驻留在捆绑的Jar中,我们只是依靠类加载器机制来解决父/子关系。也就是说。我们有一个通用的interface存储在捆绑的Jar中(应该在父类加载器上下文中)。扩展实现了这个接口(interface)(允许我们调用扩展)并依赖子类加载器使用父类加载器的资源查找功能。有没有人对此有任何经验或阐明了我们如何解决它。我会对其他类似机制感兴趣(用于将我们的库Jar

java - 类加载器如何加载 list 类路径中的类引用?

我使用maven使用addClasspath构建了一个带有外部类路径添加的jar.当我使用java-jarartifact.jar运行该jar时,它能够从该主jar和libs目录中的所有jar加载类。但是,如果我询问系统属性java.class.path,它只会列出主jar。如果我向系统类加载器询问它的url(ClassLoader.getSystemClassLoader().getURLs()),它也只会返回主jar。如果我向某个库中包含的任何类询问其类加载器,它将返回系统类加载器。系统类加载器如何加载这些类?它必须对这些库有一些了解才能从中加载类。有没有办法向它请求这种“扩展的”

java - 将 java 对象/类从一个类加载器复制到另一个类加载器

您好,有没有一种方法可以将一个类加载的上下文(属性等)从一个类加载器(例如“制作的”类点)复制到另一个类加载器?明确地说,例子:我在CL1上有一个对象点。现在在另一个CL2上运行,我想在CL3中创建这个对象。一些对象:classPoint{intx;inty;publicPoint(){}//gettersandsetters风景:...classCL2{//RunningonCL2...//PointobjfromCL1Objectpoint=gotFromCL1();//WanttocreatetheobjectonCl2ObjectpointCL2=point.conversio

java - Jetty 如何处理具有不同依赖项的同一类的类加载?

我想知道jetty如何处理可能导致同一类的多个依赖路径。例如,Jetty预打包了JSTL-1.2,但我添加了一个依赖项来加载JSTL-1.2.4。在编译时,如果我断点测试它在eclipse中下载源代码,它会在1.2.4版本中断。我想知道当有两个版本的类时,将传递哪个版本来生成JSP的字节码,比如一些基类JSTLCoreTlv依赖(一个预打包,即带有jetty的JSTL1.2和一个从maven依赖项1.2.4传递过来的)简而言之,我想知道jetty是怎么做的。我想知道jetty如何优先考虑预先打包的依赖项与稍后添加的依赖项。即使版本比预打包版本旧,它会覆盖并引用添加的依赖项吗?在这种情况

java - 使用类加载器隔离静态单例类

免责声明:鉴于此问题,这可能不是最佳解决方案,但我很好奇如何实现此实现。问题我正在尝试处理一些具有如下定义的单例的遗留代码:publicclassLegacySingleton{privatestaticBooleanvalue;publicstaticvoidsetup(booleanv){if(value!=null){thrownewRuntimeException("AlreadySetup");}value=v;System.out.println("Setupcomplete");}publicstaticvoidteardown(){value=null;System.o