-
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只能設置一個值查看全部
-
通過接口來代理查詢以避免類型混亂查看全部
舉報