java高级架构师教程-投鞭断流实现自动映射器Mapper

图灵学院  java高级架构师教程-投鞭断流实现自动映射器Mapper

首先定义一个pojo。

 java架构师学习路线

    再定义一个接口UserMapper.java。

    publicinterfaceUserMapper{

    publicUsergetUserById(Integerid);

    }

    接下来我们看看如何使用动态代理之投鞭断流,实现实例化接口并调用接口方法返回数据的。

    自定义一个InvocationHandler。

    importjava.lang.reflect.InvocationHandler;

    importjava.lang.reflect.Method;

    importjava.lang.reflect.Proxy;

    publicclassMapperProxyimplementsInvocationHandler{

    @SuppressWarnings("unchecked")

    public<T>TnewInstance(Class<T>clz){

    return(T)Proxy.newProxyInstance(clz.getClassLoader(),newClass[]{clz},this);

    }

    @Override

    publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{

    if(Object.class.equals(method.getDeclaringClass())){

    try{

    //诸如hashCode()、toString()、equals()等方法,将target指向当前对象this

    returnmethod.invoke(this,args);

    }catch(Throwablet){

    }

    }

    //投鞭断流

    returnnewUser((Integer)args[0],"zhangsan",18);

    }

    }

    上面代码中的target,在执行Object.java内的方法时,target被指向了this,target已经变成了傀儡、象征、占位符。在投鞭断流式的拦截时,已经没有了target。

    写一个测试代码:

    publicstaticvoidmain(String[]args){

    MapperProxyproxy=newMapperProxy();

    UserMappermapper=proxy.newInstance(UserMapper.class);

    Useruser=mapper.getUserById(1001);

    System.out.println("ID:"+user.getId());

    System.out.println("Name:"+user.getName());

    System.out.println("Age:"+user.getAge());

    System.out.println(mapper.toString());

    }

    output:

    ID:1001

    Name:zhangsan

    Age:18

    x.y.MapperProxy@6bc7c054

    这便是Mybatis自动映射器Mapper的底层实现原理。

    可能有读者不禁要问:你怎么把代码写的像初学者写的一样?没有结构,且缺乏美感。

    必须声明,作为一名经验老道的高手,能把程序写的像初学者写的一样,那必定是高手中的高手。这样可以让初学者感觉到亲切,舒服,符合自己的Style,让他们或她们,感觉到大牛写的代码也不过如此,自己甚至写的比这些大牛写的还要好,从此自信满满,热情高涨,认为与大牛之间的差距,仅剩下三分钟。

如果你想了解更多关于java架构师的专业知识,可以一起交流:11604这里面都是同行05674,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

原文地址:https://www.cnblogs.com/tulingxueyuan/p/14087631.html