用过MyBatis3的人可能会觉得为什么MyBatis的Mapper接口没有实现类,但是可以直接用?

那是因为MyBatis使用Java动态代理实现的接口。
这里仅仅举个简单例子来说明原理,不是完全针对MyBatis的,这种思想我们也可以应用在其他地方。
定义一个接口
public interface MethodInterface { String helloWorld(); }
实现动态代理接口
public class MethodProxy<T> implements InvocationHandler {
private Class<T> methodInterface;
public MethodProxy(Class<T> methodInterface) {
this.methodInterface = methodInterface;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("=========================");
System.out.println("方法名:" + method.getName());
//针对不同的方法进行不同的操作
return null;
}
}
这里针对invoke方法简单说说MyBatis的实现原理,在该方法中,我们通过Method能够获取接口和方法名,接口的全名相当于MyBatis XML中的namespace,方法名相当于具体一个方法中的id。也就是说通过动态代理后,可以通过SqlSession来通过namespace.id方式来调用相应的方法。使用接口更方便,但是是一种间接的方式。
动态代理工厂类
public class MethodProxyFactory {
public static <T> T newInstance(Class<T> methodInterface) {
final MethodProxy<T> methodProxy = new MethodProxy<T>(methodInterface);
return (T) Proxy.newProxyInstance(
Thread.currentThread().getContextClassLoader(),
new Class[]{methodInterface},
methodProxy);
}
}
通过该工厂类可以生成任意接口的动态代理类。
测试
MethodInterface method = MethodProxyFactory.newInstance(MethodInterface.class); method.helloWorld();
总结
一般谈到动态代理我们通常的用法都是处理事务、日志或者记录方法执行效率等方面的应用。都是对实现类方法的前置或者后置的特殊处理。
通过本文,其实可以看到另一种应用方向,那就是不需要实现类,直接通过动态代理执行接口方法,MyBatis使用这种方式方便了我们调用方法,利用这种思路我们也许可以在别的方面做出一些更好的设计。
以上所述是小编给大家介绍的MyBatis接口的简单实现原理分析,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
# mybatis
# 接口实现原理
# Mybatis 简介与原理
# Mybatis接口式编程的原理
# mybatis原理概述入门教程
# Java的MyBatis框架中Mapper映射配置的使用及原理解析
# TKmybatis的框架介绍和原理解析
# 都是
# 小编
# 的人
# 是一种
# 不需要
# 等方面
# 可以通过
# 给大家
# 可以看到
# 可以直接
# 用过
# 用在
# 更方便
# 那是因为
# 所述
# 给我留言
# 举个
# 便了
# 有任何
# 也就是说
相关文章:
黑客如何利用漏洞与弱口令入侵网站服务器?
如何通过FTP空间快速搭建安全高效网站?
免费网站制作appp,免费制作app哪个平台好?
如何在阿里云域名上完成建站全流程?
c# 服务器GC和工作站GC的区别和设置
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
在线制作视频网站免费,都有哪些好的动漫网站?
七夕网站制作视频,七夕大促活动怎么报名?
如何零成本快速生成个人自助网站?
如何基于云服务器快速搭建个人网站?
如何用y主机助手快速搭建网站?
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
,柠檬视频怎样兑换vip?
北京制作网站的公司,北京铁路集团官方网站?
黑客如何通过漏洞一步步攻陷网站服务器?
建站之星后台密码遗忘?如何快速找回?
建站之星×万网:智能建站系统+自助建站平台一键生成
宝塔新建站点为何无法访问?如何排查?
再谈Python中的字符串与字符编码(推荐)
网站制作价目表怎么做,珍爱网婚介费用多少?
如何通过NAT技术实现内网高效建站?
如何选择网络建站服务器?高效建站必看指南
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
C#如何序列化对象为XML XmlSerializer用法
如何在阿里云ECS服务器部署织梦CMS网站?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
重庆市网站制作公司,重庆招聘网站哪个好?
,制作一个手机app网站要多少钱?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
如何使用Golang安装API文档生成工具_快速生成接口文档
为什么Go需要go mod文件_Go go mod文件作用说明
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
韩国服务器如何优化跨境访问实现高效连接?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
建站上市公司网站建设方案与SEO优化服务定制指南
网站制作软件有哪些,制图软件有哪些?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
如何彻底删除建站之星生成的Banner?
建站之星ASP如何实现CMS高效搭建与安全管理?
建站org新手必看:2024最新搭建流程与模板选择技巧
实惠建站价格推荐:2025年高性价比自助建站套餐解析
深圳网站制作培训,深圳哪些招聘网站比较好?
建站之家VIP精选网站模板与SEO优化教程整合指南
如何通过主机屋免费建站教程十分钟搭建网站?
建站之星客服服务时间及联系方式如何?
*请认真填写需求信息,我们会在24小时内与您取得联系。