我正在使用JDKProxy来实现mybatis,但是我有一个问题
我没有proxy.toString()
的代码
public class BootStrap {
public static void start(){
MySqlSession sqlSession = new MySqlSession();
TestMapper testMapper = sqlSession.getMapper(TestMapper.class);
Test test = testMapper.selectByPrimaryKey(2);
}
public static void main(String[] args){
start();
}
}
@Data
public class MySqlSession {
public <T> T getMapper(Class<T> clazz){
return (T) Proxy.newProxyInstance(
clazz.getClassLoader(),//类加载器
new Class[]{clazz},//接口
new MapperProxy(this));//代理类
}
public <T> T selectByPrimaryKey(MapperData mapperData, Object parameter){
return executor.query(mapperData,parameter);
}
}
//it is no "proxy.toString"
//the bug is in this method
public class MapperProxy<T> implements InvocationHandler {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
try {
int seperate = method.getDeclaringClass().getName().lastIndexOf(".");
String mapper = method.getDeclaringClass().getName().substring(seperate + 1);
MapperData mapperData =
sqlSession.getConfiguration()
.getMapperRegistory()
.get(mapper + "." + method.getName());
if(null != mapperData){
System.out.println(String.format("SQL [%s],parameter [%s]", mapperData.getSql(), args[0]));
Class<?> clazz = sqlSession.getClass();
Method realMethod = clazz.getMethod(method.getName(), new Class[]{MapperData.class, Object.class});
return realMethod.invoke(sqlSession,mapperData,args);
}
return method.invoke(sqlSession,args);
}catch (InvocationTargetException ite) {
throw ite.getCause();
}
}
}
如果我运行return method.invoke(sqlSession,args);
,则此错误消失,因此我认为该错误属于此方法
答案 0 :(得分:0)
lombok自动为u生成toString方法
您可以检查注释的文档
@日期
为所有字段生成吸气剂,有用的toString方法和hashCode,并等于检查所有非瞬态字段的实现。还将为所有非最终字段以及构造函数生成设置器。 等同于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode。
答案 1 :(得分:0)
就我而言,这是围绕 JPA Repository 方法配置错误的切入点。
public Object logAroundDatabase(ProceedingJoinPoint joinPoint)throws Throwable {
String table = joinPoint.getTarget().toString(); //Substituted getThis() with getTarget()
return null;
}