public <T>T getMapper(Class clazz){
//创建代理对象
// ClassLoader 需要被代理的类[] 做哪一件事情(方法)
ClassLoader loader = clazz.getClassLoader();
Class[] classes = new Class[]{clazz};
InvocationHandler handler = new InvocationHandler() {
//这个invoke方法相当于是代理对象的真正执行方法
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("我是代理执行的方法");
System.out.println("代理对象"+proxy.getClass().getName());
System.out.println("代理对象代替真实对象做的方法"+method.getName());
System.out.println("代理对象接收到真实对象的参数"+args[0]);
//insert("sqlid",student);
return proxy;
}
};
Object obj = Proxy.newProxyInstance(loader,classes,handler);//代理对象(原来Dao接口的子类)
//做一个造型
T t = (T)obj;
//造型以后的代理对象返回出去
//代理对象是传递进来参数Class类型的子类对象
return t;
}