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

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

 

首先定义一个pojo。

 

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

 

    再定义一个接口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)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

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

上一篇:插入排序(insertion sort)算法实现


下一篇:【APP软件开发】|APICloud官方通用链接(Universal Links)实现