登录
注册
写文章
发现
工具
mybatis拦截器提示There is no getter for property named 'delegate' in 'class com.sun.proxy.$Proxy199'
_3t3lfz KEKfID
编辑文章
mybatis拦截器提示There is no getter for property named 'delegate' in 'class com.sun.proxy.$Proxy199'
asfx站长
2024.02.27 22:21:24
阅读
710
最近在做mybatis拦截器开发,想打印带参数的完整sql语句,发现提示:There is no getter for property named 'delegate' in 'class com.sun.proxy.$Proxy199' 经过debug排查,发现是因为得到的StatementHandler是代理对象(在配置有多个mybatis拦截器的时候才会出现得到的是代理对象),而代理对象无法获取某些属性,所以才会提示如上错误。 原来获取StatementHandler对象的写法: ``` StatementHandler statementHandler = (StatementHandler) invocation.getTarget(); ``` 知道了问题原因那就好办了,想办法获取实际对象呗~~ ####代码修改如下图: 注释原来的写法,改成如图新的获取对象方法: ![](//www.asfx.xyz/statics/images/bg/202402/28/a71a3e5f6c5a4c4da82396c4ad9f57a8.png) 下面是判断获取真实对象的方法: ![](//www.asfx.xyz/statics/images/bg/202402/28/2dd88e57b4174d2a9994100cc0525a6a.png) ``` /** * 真正的对象(非代理对象) * * @param target * @param <T> * @return */ public static <T> T realTarget(Object target) { if (Proxy.isProxyClass(target.getClass())) { MetaObject metaObject = SystemMetaObject.forObject(target); return realTarget(metaObject.getValue("h.target")); } return (T) target; } ```
我的主页
退出