image.png
    image.png

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