java-使用classloader隔离两个静态类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-使用classloader隔离两个静态类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1637字,纯文字阅读大概需要3分钟。
内容图文
![java-使用classloader隔离两个静态类](/upload/InfoBanner/zyjiaocheng/652/b4456938700b400394a40c893a24d807.jpg)
我想在同一主要方法中实例化两个TCP服务器应用程序.这些服务器类使用大量的静态和线程本地字段.是否有机会像在其他应用程序域中那样加载类?
这是我的测试用例:
Tester类具有用于设置全局静态对象的简单getter和setter方法.
public class Tester {
public Tester() {
System.out.println(getClass().getClassLoader());
}
public void setText(String text) {
GlobalObject.globalText = text;
}
public String getText() {
return GlobalObject.globalText;
}
}
这是可以从任何地方访问的全局对象.我想限制对该对象的访问.
public class GlobalObject {
public static String globalText;
}
这是我的测试程序.
public class Main {
public static void main(String[] args) {
// Default class loader;
Tester ta1 = new Tester();
ta1.setText("test");
System.out.println(ta1.getText());
Tester ta2 = new Tester();
System.out.println(ta2.getText());
// Custom class loader;
CustomClassLoader ccl = new CustomClassLoader();
try {
Tester tb = (Tester) ccl.loadClass("Tester").newInstance();
System.out.println(tb.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出是:
sun.misc.Launcher$AppClassLoader@11b86e7
test
sun.misc.Launcher$AppClassLoader@11b86e7
test
sun.misc.Launcher$AppClassLoader@11b86e7
test
我想要的输出:
sun.misc.Launcher$AppClassLoader@11b86e7
test
sun.misc.Launcher$AppClassLoader@11b86e7
test
sun.misc.Launcher$AppClassLoader@1234567
null
解决方法:
您没有告诉我们什么是CustomClassLoader.
但是总的来说,类加载器的默认行为是委派给它们的父级,因此默认情况下,所有类加载器最终都会委派给实际的系统类加载器.
尝试创建没有父级的类加载器.这是标准类加载器的外观:
URL[] urls = new URL[] {new File("build/classes/").toURL()};
ClassLoader loader = new URLClassLoader(urls, null);
第二个构造函数参数是父级.
内容总结
以上是互联网集市为您收集整理的java-使用classloader隔离两个静态类全部内容,希望文章能够帮你解决java-使用classloader隔离两个静态类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。