前置环境
第三方包里有MyTool1和MyTool2两个类。MyTool1存了一些全局变量,MyTool2去对这些变量进行修改和删除。
public class MyTool2 {
public static void set(String s) {
MyTool1.value = s;
}
public static String get() {
return MyTool1.value;
}
}
public class MyTool1 {
static {
System.out.println("第三方jar包的MyTool1被加载了,加载器为:" + MyTool1.class.getClassLoader().toString());
}
public static String value;
}
我引用了这个第三方包,同时我想对MyTool1做一些增强,于是我覆盖了MyTool1,自己又写了一个。
注意,这里我用了dev tools进行热部署。
public class MyTool1 {
static {
System.out.println("本项目的MyTool1被加载了,加载器为:" + MyTool1.class.getClassLoader().toString());
}
public static String value;
}
当我现在对MyTool1手动做了一些修改的时候,再用MyTool2去get它,发现这些修改都是失效的。
@org.springframework.stereotype.Controller
public class Controller {
@RequestMapping("/test")
@ResponseBody
public Object test() {
MyTool1.value = "jojo!";
String x = MyTool2.get();
return x;// 返回的为空
}
}
解释
对应类加载器输出:
总结
- jar包调用混乱,以后要理清逻辑
- 打成jar包执行不会有问题,只是本地测试会有问题
- 遇见类加载问题先想是不是热部署的问题。