当我在我的项目中添加阻断器时,我发现了一个错误,上面写着There is no getter for property named 'delegate' in 'class com.sun.proxy.$Proxy398'
详情如下:
@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class,
Integer.class})
}) StatementHandler statementHandler = (StatementHandler) invocation.getTarget();
MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
//obtain mappedStatement
MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");错误发生在最新的代码中。
MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
发布于 2022-09-19 06:31:28
为什么会发生此错误。我试着找出加法和以前的区别。我发现项目中有一个相同类型的Intercepts Signature。
据我们所知,紫花莲插件会自行包装,所以解决它的方法就是获得最终的目标。
StatementHandler statementHandler;
Object expectedStatementHandler = invocation.getTarget();
while (Proxy.isProxyClass(expectedStatementHandler.getClass())) {
MetaObject metaObject = SystemMetaObject.forObject(expectedStatementHandler);
//fastReturn
if (BooleanUtils.isNotTrue(metaObject.hasGetter("h.target"))) {
log.error("cant find mappedStatement h.get method");
break;
}
expectedStatementHandler = metaObject.getValue("h.target");
}
//failFast
if (!(expectedStatementHandler instanceof StatementHandler)) {
log.error("sorry,expectedStatementHandler not instanceof StatementHandler!");
return;
}
statementHandler = (StatementHandler) expectedStatementHandler;
MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");https://stackoverflow.com/questions/73769297
复制相似问题