JFinal 4.9 @Clear无效的情况

JFinal 4.9 @Clear无效的情况,追踪原码发现Class对象编号不一致。这里的判断是不是要用name来判断 ?

image.png

image.png

评论区

_imlzw_

2020-08-03 20:10

@JFnial

lxhxka

2020-08-04 08:46

热加载的问题?

_imlzw_

2020-08-04 13:16

@lxhxka 自己写jetty代码加载, 用java Runtime.exec执行main方法启动:

public static void main(String[] args) {
String port = args[0];
String webRoot = args[1];
String extClassPath = args[2];
System.out.println("port:" + args[0] + "\nwebRoot:" + args[1] + "\nextClassPath:" + extClassPath + "\n");
try {
startWithJetty(Integer.parseInt(port), webRoot, extClassPath);
} catch (Exception exception) {
exception.printStackTrace();
}
}

public static void startWithJetty(int port, String webroot, String extClassPath) throws Exception {
Server server = new Server(port);
WebAppContext context = new WebAppContext();
context.setContextPath("/");
context.setResourceBase(webroot);// 指定webapp目录
context.setExtraClasspath(extClassPath);
server.setHandler(context);
server.start();
server.join();
}

lxhxka

2020-08-04 14:52

@_imlzw_ 你这个我直接看不出来,你看下两个 class 的classLoader 是不是同一个, 正常情况下同一个 class 不应该出现两个实例,具体自己再看看你的环境吧。

_imlzw_

2020-08-05 14:25

@lxhxka
发现的确不一样,不知道为何会不一样。
curInterClass 的 类加载器为:sun.misc.Launcher$AppClassLoader@18b4aac2
ci 的 类加载器为:org.eclipse.jetty.webapp.WebAppClassLoader=jfinal offical website@72d1ad2e

_imlzw_

2020-08-05 14:47

通过手动设置类加载器为系统默认加载器后,有效
context.setClassLoader(ClassLoader.getSystemClassLoader());

JFinal

2020-08-05 15:07

@_imlzw_ 估计是你的项目在哪里动了 ClassLoader 才出现的这个问题

正常流程使用 jfinal 从来不会出这个问题