问题:在jfinal4.6版本以后使用了自己的proxy后aop.get(class)会报泛型问题
符号: 类 T 位置: 类 com.jiubanqingchen.wish.org.business.user.UserService$$EnhancerByJFinal 2020-09-28 17:11:51 [ERROR] (ProxyCompiler.java:155):lambda$outputCompileError$0():/UserService$$EnhancerByJFinal.java:38: 错误: 找不到符号 public T update(T p0, com.jfinal.plugin.activerecord.Record p1, com.jiubanqingchen.wish.model.models.User p2) throws java.lang.Exception { ^ 符号: 类 T 位置: 类 com.jiubanqingchen.wish.org.business.user.UserService$$EnhancerByJFinal 2020-09-28 17:11:51 [ERROR] (ProxyCompiler.java:155):lambda$outputCompileError$0():/UserService$$EnhancerByJFinal.java:72: 错误: 找不到符号 public boolean delete(T p0, com.jfinal.plugin.activerecord.Record p1, com.jiubanqingchen.wish.model.models.User p2) throws java.lang.Exception {
代码如下:
public class ModelController<T extends ModelService, M extends Model> extends BaseController implements IModelController { private static Logger logger = LoggerFactory.getLogger(ModelController.class); protected T service; private Class<M> modelClazz; public ModelController() { service = Aop.get(((Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0])); } ...... }
如上代码直接使用是没问题的;出现问题是因为我加了一个全局service拦截器;不加全局service拦截器程序是可以正常运行的
me.addGlobalServiceInterceptor(new MessageAop());
我看了下文档 使用了cglib代理方式,这样是可以用aop.get()没有问题;全局service拦截器也能正常使用
me.setToCglibProxyFactory(); // 4.6 版本新增配置方式
想请教下我这个问题是什么原因呢
项目:JFinal
使用 me.setToCglibProxyFactory(); 是通过 cglib 直接改写字节码来实现 aop 的,可以解决这个问题
一般情况没事