当前位置: 首页 > news >正文

网站打不开服务器错误建设银行官网登录入口

网站打不开服务器错误,建设银行官网登录入口,手工艺品网站建设方案,php做网站页面在哪做文章目录动态代理代理对象的创建过程动态代理 Mybatis使用JDK动态代理为Mapper 接口创建代理对象。当调用Mapper接口方法时,实际上调用的是代理对象的方法,代理对象会将方法调用转发给Mybatis的核心执行器。 MapperProxy:实现了 Invocation…

文章目录

      • 动态代理
        • 代理对象的创建过程

动态代理

Mybatis使用JDK动态代理为Mapper 接口创建代理对象。当调用Mapper接口方法时,实际上调用的是代理对象的方法,代理对象会将方法调用转发给Mybatis的核心执行器。

  • MapperProxy:实现了 InvocationHandler 接口,是Mybatis动态代理的核心类
  • MapperProxyFactory :负责创建Mapper 接口的代理对象
  • MapperRegistry:管理所有Mapper 接口及其对应的代理工厂。
代理对象的创建过程

1、初始阶段:

  • Springboot项目启动时解析所有的Mapper接口和映射文件
  • 为每个Mapper接口创建MapperProxyFactory,并注册到 MapperRegistry:Map<Class<?>, MapperProxyFactory<?>> knownMappers

2、获取Mapper 实例:

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 大致实现内容如下:
  • 通过MapperRegistry 获取对应的 MapperProxyFactory

  • 使用MapperProxyFactory 创建代理对象

  public <T> T getMapper(Class<T> type, SqlSession sqlSession) {final MapperProxyFactory<T> mapperProxyFactory = (MapperProxyFactory<T>) knownMappers.get(type); // 获取对应的 MapperProxyFactoryif (mapperProxyFactory == null) {throw new BindingException("Type " + type + " is not known to the MapperRegistry.");}try {return mapperProxyFactory.newInstance(sqlSession); // MapperProxyFactory 创建代理对象} catch (Exception e) {throw new BindingException("Error getting mapper instance. Cause: " + e, e);}}
// 其中newInstance:
final MapperProxy<T> mapperProxy = new MapperProxy<>(sqlSession, mapperInterface, methodCache);
return (T) Proxy.newProxyInstance(mapperInterface.getClassLoader(), new Class[] { mapperInterface }, mapperProxy);// 构建代理类class,并实例化一个对象。JDK动态代理的具体流程见另一篇文章。
// 动态代理:所有 Mapper 方法调用会被拦截并转发给 MapperProxy.invoke()。 此处涉及到代理类的源码,见后续内容。

JDK动态代理的具体流程见另一篇文章。
此处做简单的说明:

为接口生成一个实现类的class文件的字节码,并加载到JVM中,在字节码文件中,重写了接口的方法:

public final void methodName() {super.h.invoke(this, MethodObject, // 对应方法的Method对象args);        // 方法参数
}

所以当使用代理对象调用接口中的方法时,执行的其实是invocationHandler对象中的invoke方法,而此时invocationHandler对象是mapperProxy对象。具体执行内容见MapperProxy。

3、方法调用流程

当调用mapper接口方法时:

  • 代理对象拦截方法调用
  • 创建MapperMethod对象(封装了SQL命令和执行逻辑)
  • 执行 MapperMethod.execute()方法
  • 根据方法类型(select/insert/update/delete)调用SqlSession的相应方法
  • 返回执行结果
http://www.dtcms.com/a/443470.html

相关文章:

  • HandlerThread源码阅读
  • 口碑好的番禺网站建设腾讯云自助建站
  • 54所面经准备
  • 宣讲家网站美丽乡村建设怎么创网站赚钱吗
  • 如何建立小程序网站网站开发技术项目代码搜索
  • C语言编译执行过程
  • 网站长尾词排名做不上去响应式布局代码怎么写
  • 【Linux】进程信号(1)
  • 男女做那个的的视频网站常见的网页设计工具
  • 做网站时管理员权限的页面wordpress标签前缀
  • 建网站找哪个平台好呢专业简历制作网站有哪些
  • 3.2.2 LangChain.js + LangGraph.js 实战
  • ARL资产侦察灯塔系统一键部署教程(2025最新)
  • 山东省环保厅官方网站建设项目网站建设好找工作吗
  • ui界面设计说明范文网站排名优化价格
  • SSM大学请假管理系统e9kl1(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • java基础-11 : 数据结构与算法
  • 洛谷P1036 [NOIP 2002 普及组] 选数 题解
  • 坂田做网站的公司业务员销售管理软件
  • 网站服务器基本配置微信管理系统在哪
  • C语言题目与练习解析:配套《数据在内存中的存储》
  • Effective STL 第1条:慎重选择容器类型
  • 网站做多长时间才有流量双线主机可以做彩票网站吗
  • 外贸型网站建设公司福州最好的网站建设公司
  • 规划网站建设的总体目标张家港网站设计制作早晨设计
  • 安徽高端网站建设免费国外网站模板
  • 国外做建筑平面图的网站网页如何发布
  • 外贸网站如何推广做网站界面用的软件
  • 英文建站系统广州购网站建设
  • 手机版的学习网站ppt模板简约