2020-09-28 18:12
@天晴 很多知名开源项目也用的 Apache License 2.0 协议
用这些知名开源项目的项目不计其数,不必担心商业化的问题
2020-09-26 18:52
@锅包肉 应该是你的某个依赖间接依赖了 jfinal 2.1
可能是 jfinal-ext 这个项目, 这个项目后来出了 jfinal-ext2,尝试升级到这个高版本
2020-09-26 15:30
@李通 JDK 动态代理必须要求被代理的目标实现接口,这个就极大限制了可代理的范围,所在 JDK 代理其实并没有多少意义
你说的很对,生成 java 代码可读性很好,出问题容易排错,而如果用 asm 操作字节码,出问题就不容易排查,字节码的可读性跟汇编语言是同一层次的
2020-09-26 10:39
@李通 常规方法是通过 asm 或 cglib 做节码增强,其中 asm 方案可读性很差,而 cglib 增加了一个第三方依赖
jfinal 在 4.0 版本时去除了唯一的第三方依赖 cglib,采用了动态编译方案。该方案我从没在别的地方看到过,属于 jfinal 独创
不仅如此,该方案还与控制层的 AOP 使用了同一个 Interceptor + Invocation 结构,代码其实很优雅,注意看一下控制层的 AOP 没采用动态编译也没采用 cglib,而是采用的 actionKey 与 Action 映射的方式实现的
2020-09-26 01:03
@李通 这部分代码很少,主要流程就是:
1:ProxyGenerator 生成被代理类的子类,覆盖子类的被代理方法,生成的模板如下:
https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/proxy/proxy_class_template.jf
看懂生成的 java 文件就能明白为啥可以实现 AOP 功能
2:生成 .java 文件以后,再使用 ProxyCompiler 编译成 .class 文件
3:使用 ProxyClassLoader 加载编译好的 .class 文件。使用 ProxyClassLoader 加载的类时,会用上其 AOP 相关功能
最好的办法是通过单步调试源码了解运行原理,代码不多,只有 600 多行,一会就看完了
2020-09-24 22:12
@jfinal爱好者22 导致的原因得面向 GSON 去了解,对于使用者来说 LinkedTreeMap 也是 Map 的一种实现,不影响使用