Java 如何将自定义类加载器设置为默认值?
Java 如何将自定义类加载器设置为默认值?,java,tomcat,classloader,Java,Tomcat,Classloader,我正在尝试使用自定义类装入器来练习自己,我有一些问题。是否有方法指示JVM全局使用我的自定义类加载器?例如,我编写了在Tomcat6下运行的小应用程序。servlet由容器管理,我应该在哪里设置类装入器?此外,webapp使用了一些第三方jar,我可以控制这些jar的类加载吗
对于独立应用程序,上述问题的答案是否会有所不同
谢谢 您可以将系统默认类加载器设置为JVM参数:
java -Djava.system.class.loader
=com.test.YourCustomClassL
我正在尝试使用自定义类装入器来练习自己,我有一些问题。是否有方法指示JVM全局使用我的自定义类加载器?例如,我编写了在Tomcat6下运行的小应用程序。servlet由容器管理,我应该在哪里设置类装入器?此外,webapp使用了一些第三方jar,我可以控制这些jar的类加载吗
对于独立应用程序,上述问题的答案是否会有所不同
谢谢 您可以将系统默认类加载器设置为JVM参数:
java -Djava.system.class.loader
=com.test.YourCustomClassLoader com.test.YourMainClass
由于Tomcat作为java应用程序启动,您也可以在%Tomcat\u HOME%\bin\run.bat
或$Tomcat\u HOME/bin/run.sh
可执行文件中设置此参数
编辑以完成:
如果将类加载器设置为de系统类加载器,它将用于加载Tomcat组件类、不同的库和您自己的类。
如果希望类加载器仅用于应用程序类(包括库等),则应为上下文配置loader
元素。
Loader元素必须在上下文
元素中定义,它可以在Context.xml
文件中定义。
更多信息:
- :定义类加载器在Tomcat中的工作方式
- :如何定义
上下文元素
- :如何为自己的
上下文定义自定义加载程序元素
出于某种原因,它让我得到了java.lang.Error:java.lang.IllegalStateException:recursive调用。这就是我所做的:对类加载器进行子类化,提供以类加载器为参数的c'tor,使用-Djava.system.class.loader对其进行配置,然后。。。繁荣在VM初始化过程中出错:-(我错过了什么吗?我已经用我的一个小主应用程序对它进行了测试,它运行在OK.package com.demo.presale;公共类MyClassLoader扩展了ClassLoader{public MyClassLoader(ClassLoader parent){}受保护的类loadClass(字符串名称,布尔解析)抛出ClassNotFoundException{Class c=super.loadClass(name,resolve);System.out.println(“name:+name+”,Class:+c);返回c;}}}和异常:java.lang.IllegalStateException:java.lang.ClassLoader.initSystemClassLoader(ClassLoader.java:1312)的递归调用位于java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:1295)的java.lang.ClassLoader.(ClassLoader.java:228)的com.demo.presale.MyClassLoader.(MyClassLoader.java:7)的sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)在我的测试代码中,重写的构造函数调用父类构造函数。它检查一些权限,并将“initialized”属性设置为true。我还重写了默认构造函数,也调用了父类构造函数:package com.test;公共类MyCustomClassLoader扩展类加载器{public MyCustomClassLoader(){super();}public MyCustomClassLoader(ClassLoader父级){super(父级);}/*其余代码与您的代码完全相同*/}