jjzjj

ClassLoader

全部标签

Java:如何加载已经在类路径上的类(及其内部类)?

如何加载已经在类路径上的类、实例化它,以及实例化其中定义的任何内部类?如:publicclassTestClass{publicclassInnerClass{}} 最佳答案 内部类不能存在于父类之外。您需要先构造父类。没有反射(reflection),这看起来像:InnerClassinnerClass=newTestClass().newInnerClass();在反射中,需要在构造内部类时传入父类。ObjecttestClass=Class.forName("com.example.TestClass").newInstanc

java - 在 Stream Start 之前访问 Flink Classloader

在我的项目中,我想在执行流之前访问Flink用户类加载器。我一直在实例化我自己的类加载器以在流执行之前反序列化类(尽我所能避免与多个类加载器相关的问题)。然而,我的进展越深入,我不得不编写(错误的)代码来避免这个问题的问题就越多。如果我可以访问Flink用户类加载器并使用它,这可以解决,但是我没有看到在“RichFunctions”之外这样做的机制(https://ci.apache.org/projects/flink/flink-docs-stable/api/java/org/apache/flink/api/common/functions/RichFunction.html)

java - 如何在类路径的 .jar 中查找资源?

如果我的类路径上的目录中有一组资源文件,我可以使用ClassLoader.getResources(location)枚举它们。例如,如果我在类路径上有/mydir/myresource.properties,我可以调用类加载器的getResources("mydir")并获取包含以下内容的URL枚举我的资源.properties。当我将完全相同的资源打包到一个.jar中时,我在调用时在URL枚举中没有得到任何东西。我只用包含这些文件夹的jar替换了文件夹结构(这是一个webapp,所以jar进入/WEB-INF/lib)。我还使用getResourceAsStream(locatio

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

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

java - Guice 无法实例化扩展 JPanel 的类 - NPE 调用 super 构造函数

我们有一个带有GoogleGuice4.1.0依赖项注入(inject)的桌面Swing应用程序。开发期间一切正常,但当同事尝试运行该应用程序时发生了一些奇怪的事情。我们有一个扩展JPanel的MainWindow类。在构造函数中,此类采用一些本身可注入(inject)的Controller。在main方法中创建了Guice注入(inject)器。然后注入(inject)器尝试实例化MainWindow(injector.getInstance(MainWindow.class))。它因NullPointerException而失败!这不会发生在我的电脑上,我们使用相同的JDK。这里是

java - Spring Boot 在 jar 签名后不读取组件

我正在开发一个服务于RESTHTTP(S)请求的SpringBoot应用程序。(很常见)。它按预期工作,但在最终(和工作)jar被签名(通过有效证书)后,所有URL映射都停止工作,仅向任何请求返回404。(请注意,嵌入式Tomcat服务器启动没有问题,我没有收到任何异常)经过一些调试后,我发现Java的默认ClassLoader(Laucher$AppClassLoader)在jar签名时不会返回我配置的包(@ComponentScan)中的类。//org.springframework.core.io.support.PathMatchingResourcePatternResolv

java - 动态编译源文件时如何为JavaCompiler提供接口(interface)?

我试图在运行时编译和加载一个类,但不知道该类的包。我知道该类应该符合接口(interface)和源位置(以及类名)。我正在尝试以下操作:/*Compilingsource*/Fileroot=newFile("scripts");FilesourceFile=newFile(root,"Test.java");JavaCompilercompiler=ToolProvider.getSystemJavaCompiler();compiler.run(null,null,null,sourceFile.getPath());Test.java文件看起来像importfoo.Itest;p

java - 修改执行 Jar 文件

你好StackOverflow的friend们。我有一个简单的问题,我担心没有简单的解决方案,我需要有关如何进行的建议。我正在开发一个打包为可执行JAR的java应用程序,但它需要在执行期间修改其某些JAR文件内容。在这个阶段我遇到了一个问题,因为一些操作系统锁定了文件以防止写入它。在应用程序退出时,用户必须看到更新版本的jar文件,尽管我可以非常灵活地实现这一点。干净高效的解决方案显然是可取的,但可移植性是唯一的硬性要求。以下是我可以看到的解决问题的三种方法,请随时发表评论或提出其他建议。告诉Java解锁JAR文件以进行写入(这似乎不可能,但这是最简单的解决方案)在应用程序启动时将可

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

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

java - java程序启动时会发生什么?

最近接触了Java类加载器,突然意识到,没有完全理解当有人调用时发生了什么step-by-stepjava-jarApp.jar我猜创建了一个新的JVM实例使用ClassLoader加载主类和其他类字节码从main()方法开始执行但我仍然认为还有很多事情我需要了解更多。谁以及如何决定哪些类应该在启动时加载以及哪些需要时加载?我发现了两个相关问题,但没有解释如何将其应用于Java现实。Whathappenswhenacomputerprogramruns?Whathappenswhenyourunaprogram? 最佳答案 •Who