2024-06-17 17:37

之前的 jfinal 由于是 all in one 项目,而一直要确保 jfinal 自身没有任何第三方依赖,所以必须要无第三依赖地方式去实现动态代理

从这个角度上验证了:严苛的限制条件可激发创新

这个问题还导致了我有新的创作思路,完美的东西放 aifei 内核,不完美的东西放内核之外,这样极大减轻了工作量

2024-06-17 17:34

@chcode 确实可惜,还有一个原因是 aifei 内核尽可能是纯抽象代码,所以动态代理这类实现被放在 aifei-base 等周边项目之中

而周边项目,我并不打算做到对任何第三无依赖,所以用用 javassist 变成可接受的

最终,只要确保 aifei 内核是完美的就可以了

2024-06-17 10:02

代理建议用后来新增的 javassist 代理实现,阿里这些大厂用的这个,配置一下:
me.setToJavassistProxyFactory();

新框架 aifei 已经将默认代理切到 javassist 了,原先的动态编译不再使用,主要原因还是动态编译依赖 JDK,而有些 docker 服务端生产环境可能安装的是 JRE

2024-06-14 17:47

@liugz 谢谢你这么多年对 jfinal 的支持

2024-06-14 15:28

你代码中的这些不再需要,因为后来的 jfinal 版本早就默认是这样的配置了:
arpDc.getEngine().setToClassPathSourceFactory();

2024-06-14 15:26

已经改进了这里:
https://gitee.com/jfinal/jfinal/commit/3cdab9ebd945d96002c13ea28c007f1c0fdd8e24

目前,你可以通过复制我刚刚提交的代码,改个类名,去实现独立配置的需求

2024-06-14 15:13

我看了一下源码,看到了这个:
private static Boolean toLowerCase = null;

证明还真是共享的,我一会去除 static 这个关键字

2024-06-14 15:12

@liugz CaseInsensitiveContainerFactory 的配置在每个数据源中是独立的,你在这个类里面打断点调试一下看看,应该是别的原因造成的

2024-06-14 14:49

@liugz 这个就是可以各个数据源各管各的,可以分别配置:
arp1. setContainerFactory(...)
arp2. setContainerFactory(...)
arp3. setContainerFactory(...)

注意看源码,参数为 true/false 决定是 jfinal 在框架层面是否要帮你转成大写或小写,无参时 jfinal 不干预

所以,CaseInsensitiveContainerFactory 构造方法的参数,有三种用法,分别是:无参、true、false, 都试一下

2024-06-14 13:54

看一下源码 CaseInsensitiveContainerFactory.java , 单步调试一下,而且这个也可以扩展,扩展 ContainerFactory 接口

2024-06-14 13:27

new CaseInsensitiveContainerFactory(true)
改为
new CaseInsensitiveContainerFactory()
即可

如果希望转成大写,改为
new CaseInsensitiveContainerFactory(false)

2024-06-13 18:10

输入“日期”,查询结果中没有“日期”的会被查出来, 这个可能是分词器将 "日"、"期" 也进行了分词

尝试配置停用词过滤器,例如:
"filter": {
"stopwords_filter": {
"type": "stop",
"stopwords": ["日", "期", "不想", "匹配", "的", "单字"] // 添加不想匹配的单字或词
}
}

2024-05-30 20:05

@天晴 加到新项目 aifei 中去

2024-04-25 13:21

你上面的代码应该已经对了,可以考虑在一个全局拦截器中判断,没启动时在拦截器中启动它