当前位置: 首页 > 面试题库 >

如何将我的自定义类加载器设置为默认值?

白智
2023-03-14
问题内容

我正在尝试使用自定义类加载器进行练习,并且有一些问题。有没有一种方法可以指示JVM在全球范围内使用我的自定义类加载器?例如,我写了一个在Tomcat
6下运行的小型应用程序。该servlet由容器管理,应在哪里设置类加载器?另外,Web应用程序使用了一些3rd party
jars,我可以控制这些jars的类加载吗?

对于独立应用程序,以上答案是否会有所不同?

谢谢!


问题答案:

您可以将系统默认类加载器设置为JVM参数:

java -Djava.system.class.loader
    =com.test.YourCustomClassLoader com.test.YourMainClass

由于Tomcat是作为Java应用程序启动的,因此您也可以在%TOMCAT_HOME%\bin\run.bat$TOMCAT_HOME/bin/run.sh可执行文件上设置此参数。

编辑完成:
如果将您的类加载器设置为系统类加载器,它将用于加载Tomcat组件类,不同的库以及您自己的类。如果希望仅将类加载器用于应用程序类(包括库等),则应Loader为上下文配置一个元素。必须在Context元素内部定义Loader元素,并且可以在context.xml文件中定义。更多信息:

  • Apache Tomcat:类加载器HOW-TO:定义ClassLoader在Tomcat中的工作方式。
  • Tomcat配置参考:上下文容器:如何定义Context元素
  • Tomcat配置参考:加载程序组件:如何为自己的定义自定义Loader元素Context


 类似资料:
  • 我试图修改几个类的字节代码,这些类的打包jar文件不在类路径中-它们是在给定URL的运行时由自定义的加载的。我尝试使用和来拦截那些类,但失败了。类加载器是遗留项目的一部分,因此我无法直接对其进行更改。 代理可以很好地处理AppClassLoader“本地”加载的类,但只会忽略那些由自定义类加载器加载的类。 CustomClassLoader: 我的代理中使用的ClassFileTransforme

  • Edit:按照@Fabian的建议更改了java类,我以前确实尝试过,得到了上面提到的这个错误。

  • 我正在为我的应用程序实现一个发布机制,并希望使用REST API将其与我的YouTrack耦合。 在发布时,我想将新创建的问题的默认值‘修复版本’设置为bumped版本。

  • 我正在开发一个运行完美的SpringBoot REST项目。我试图在项目中实现OpenApi-ui。它在默认情况下工作得很好,但我希望使用自己的YAML/JSON信息文件,而不是默认的信息。 访问OpenApi UI的URL http://localhost:8080/swagger-ui/index.html?configurl=/v3/api-docs/swagger-config OpenA

  • 如果我没有在结构中定义构造函数,我可以通过如下方式选择某个值来初始化它: 但是如果我添加新的默认构造函数,那么我就会失去这个功能: 两种方式都有可能吗? 我尝试添加默认构造函数,但似乎也不起作用。

  • 问题内容: 我有一个Java类,它在启动时基于javassist类加载器创建自定义类加载器,然后运行实际的程序类。我收到以下错误: 该问题与以下事实有关:一个对象是由原始类加载器创建的,而另一个是由自定义类创建的。 有没有办法解决此错误? 在此先感谢 Avner 问题答案: 请尝试将-Dlog4j.ignoreTCL =true设置为希望有帮助。关于log4j的类似问题