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

网站打不开dns修改吗网站关键词被改

网站打不开dns修改吗,网站关键词被改,什么是门户网,wordpress rss教程文章目录动态代理代理对象的创建过程动态代理 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/588153.html

相关文章:

  • 河南建设厅官方网站建站哪家好用兴田德润
  • 网站开发支付宝大连企业做网站公司排名
  • 网站备案备的是域名还是空间桂林市天气预报15天准确
  • 作品集用什么网站做房产网app
  • 公司年前做网站好处wordpress+search+sql
  • 我要学习网站建设wordpress 整站 数据
  • 杭州网站制作公司排名建筑效果图用什么软件制作
  • 深圳网站建设简介wordpress隐私设置
  • 网站设计页面如何做居中地方网站怎么做推广
  • 网站建设会计分录网站如何备案 流程
  • 冲电气软件 网站建设wordpress商店安装
  • 东莞网站建设营销服务平台哪里有建设公司官网
  • 哪里有免费的网站模板下载 迅雷下载软件阿里云网站
  • 手机网站flash在线crm软件系统
  • 网站建设策划书的心得泉州网站建设工作室
  • 设计素材网站飘网站建设 海外房产
  • 服务好质量好的网站制作网站建设咨询话术技巧
  • 西安网站建设开发做僾免费观看网站
  • 邯郸企业建站百度定位店铺位置怎么设置
  • 东海网站建设网站做app的软件
  • 湖南省建二公司官网如何优化网站结构
  • 新宁县建设局网站wordpress 复杂 密码
  • 邢台网站制作有哪些如何开发一款小游戏
  • 最简单的网站建设语音邯郸医院网站建设
  • 系统之家网站怎么做广告店名大全集
  • 外贸免费开发网站模板wordpress个人网站模板
  • 运行一个网站的成本做网站云服务期
  • 成品网站分享一下网页背景图片高清
  • 广州网站平面设计主要做什么工作
  • 网站运营条件优化大师专业版