-
package test;
/*
* 接口
*
*/
public interface IMessage {
public String queryMessage(int id);
}
package test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/*
* 事务类
*/
public class MessageHandler implements InvocationHandler {
Class<?> object;
public MessageHandler(Class<?> object) {
super();
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
System.out.println("接口名:"+object.getName());
System.out.println("方法名:"+method.getName());
return null;
}
}
package test;
import java.lang.reflect.Proxy;
import com.sun.org.apache.bcel.internal.generic.NEW;
/*
* 创建并返回代理实例
*/
public class SqlSesssion {
@SuppressWarnings("unchecked")
<T> T getMapper(Class<T> class1){
Object object=null;
MessageHandler mHandler=new MessageHandler(class1);
object=Proxy.newProxyInstance(class1.getClassLoader(), new Class[]{class1}, mHandler);
return (T)object;
}
}
package test;
/*
* 测试类
*/
public class Test {
public static void main(String[] args){
System.out.println("加载配置信息");
System.out.println("通过加载配置信息加载一个代理工厂的Map");
System.out.println("这个Map存放的是接口class和对应的代理工厂");
SqlSesssion ss=new SqlSesssion();
IMessage iMessage=ss.getMapper(IMessage.class);
iMessage.queryMessage(0);
}
}
查看全部 -
作业,模拟接口编程的原理过程
查看全部 -
聊天查看全部
-
理解mybatis的拦截器
查看全部 -
mybatis源码查看全部
-
解决几个问题查看全部
-
推理的过程查看全部
-
1、没有实现类的接口为什么能执行定义的方法?
通过动态代理
查看全部 -
@Intercepts({ @Signature(type = StatementHandler.class, method = "prepare", args = {
Connection.class, Integer.class }) })
MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
以上两处如果按照老师的方法写可能会报错。
查看全部 -
数组使用int[]这样的形式来加载查看全部
-
拦截之后依然需要确认是否需要拦截查看全部
-
在@intercepts注解中的signature中描述拦截的位置查看全部
-
在获取SQL语句时进行拦截查看全部
-
paramType只能设置一个值查看全部
-
通过接口来代理查询以避免类型混乱查看全部
举报