动态代理

有一段时间没有写文章了, 主要是回想起这两年多的时间,多多少少,每个知识点差不多都有写到了, 一时也想不起什么新鲜的知识分享给大家.今天写动态代理,主要是在看Mybatis源码时,发现真的是把动态代理用的是太6 了, 感叹之余,有一些心得,和大家分享一下.

我所理解的动态代理

其实网上对动态代理的解释有很多了,我就不赘述那些概念了, 于小刀看来, 目的只有一个,那就是可以自定义逻辑,可以添加逻辑. 在本文中,我想写的是可以自定义逻辑, 在此之前,我们先看一下通常的动态代理的代码

动态代理代码

源码地址:

https://github.com/xiaodaojava/sunshine/tree/master/sunshine-base/src/main/java/red/lixiang/tools/demo/proxy/dynamic

接口

实现类

代理类

Main函数

我们在运行的时候打个断点,可以看到:

如上图所示,我们虽然把jdk生成的代理对象强转成了Greet,但实际上是Proxy类型,运行结果如下图所示:

进入正文

上面这些代码, 是平常的增加逻辑的用法,但,今天小刀想和大家聊的是: 自定义逻辑.先看代码 接口不变,

代理类

main函数

运行结果如下:

全文的重点

是可以正常运行的, 这里会打破大家一个思维定式,就是代理类里面并不一定需要真正的处理对象, 可能全部都是自定义的逻辑.

源码中的应用

主要是mybatis , 我们想一下, 在写sql时, 我们经常DAO里面都是接口和定义的方法, 然后mapper的xml里面写SQL, 那么这两者是怎么对应起来的呢? 今天先不细讲, 只是看看动态代理的使用,要出场的是MapperProxyMapperProxyFactory:

我们可以看到,传入的InvocationHandler实际上是mapperProxy

cachedInvoker 通过源码,我们可以跟踪到的代码:

最终我们可以看到:

然后使用sqlSession去执行Sql

总结

如上mybatis中对动态代理的使用,并没有实现类,正是在invoke方法中,直接调用了sqlSession去执行SQL , 刚开始看到这块时, 不是很好理解 , 要破开思维, 为什么动态代理一定要有代理对象呢? 我们也完全可以自己模拟逻辑!

mybatis 自定义函数_JDK动态代理一定要有代理对象吗?请你结合Mybatis回答相关推荐

  1. mysql动态函数库_mysql自定义函数与动态查询

    介绍下mysql自定义函数的例子,以及插入单引号的方法,动态执行查询与字符串拼接的相关内容. 1.mysql自定义函数的例子 mysql不能像oracle 一样写 动态SQL. 代码示例: DROP ...

  2. mysql 自定义查询函数,mysql自定义函数与动态查询

    摘要 腾兴网为您分享:mysql自定义函数与动态查询,智学网,夜读小说,小睡眠,西餐菜谱等软件知识,以及猫语翻译器,江西校讯通,刷qq业务的网站,房洽洽,学士服照,爱站seo工具包,虚拟声卡驱动,隐藏 ...

  3. Mybatis DAO开发--Mapper动态代理开发方式

    Mybatis DAO开发–Mapper动态代理开发方式 第一步:jar包 创建lib目录,引入相应的jar包,本节课用到的案例引入的jar包就是spring整合mybatis要用到的全部jar包. ...

  4. mybatis里的日志动态代理

    上一篇博客说到mybatis对日志的实现有一个优先顺序,本篇以jdkLog为例探讨mybatis运用到的动态代理模式. 首先要知道它为什么要使用动态代理,可以观察到当执行mybatis的代码时,他总能 ...

  5. python自定义函数名_使用自定义名称创建Python动态函数

    如果这个问题已经提出并得到了回答,我深表歉意. 我需要做的是非常简单的概念,但不幸的是,我还没有找到一个在线答案. 我需要在Python(Python2.7)中使用运行时的自定义名称创建动态函数.每个 ...

  6. Mybatis源码学习-动态代理

    Mybatis源码学习-动态代理 binding包下面是mybatis的mapper动态代理 // Mybatis官方手册建议通过mapper对象访问mybatis,因为使用mapper看起来更优雅 ...

  7. python中自定义函数如何传递动态参数_python 函数的动态参数

    1. 函数的动态参数 1. *args 位置参数动态传参 2. **kwargs 关键字参数动态传参 顺序:位置参数, *args, 默认值, **kwargs def func(*args, **k ...

  8. mybatis mysql 自定义函数_mysql自定义函数的调用问题

    我在创建自定义函数的调用sql时,一直在报错,希望能给一个解决方案,谢谢,附带我需要调用的sql以及创建的自定义函数 SELECT CONCAT(date_format(SYSDATE(), '%Y% ...

  9. Mybatis系列全解(八):Mybatis的9大动态SQL标签你知道几个?提前致女神!

    封面:洛小汐 作者:潘潘 2021年,仰望天空,脚踏实地. 这算是春节后首篇 Mybatis 文了~ 跨了个年感觉写了有半个世纪 - 借着女神节 ヾ(◍°∇°◍)ノ゙ 提前祝男神女神们越靓越富越嗨森! ...

最新文章

  1. 自动驾驶QNX,Linux,Autosar概述
  2. Android 拍照是开启(调用)闪光灯(原创)
  3. sql针对某字段去重查询_sql的简单查询
  4. 信息学奥赛一本通C++语言——1035:等差数列末项计算
  5. mongodb 导出时间格式_MongoDB批量将时间戳转为通用日期格式示例代码 _ 蚂蚁视界...
  6. 支持色温调节 新款Kindle Oasia上市 国行版售价2399元起
  7. odbc数据库access丢失_有关使用access数据库,odbc中碰到的一些问题。
  8. 算法4中 1.4节示例中运行次数的讲解
  9. html json编辑器,JSON.html HTML Editor
  10. Revit导入CAD翻模丨CAD图层管理控制显示隐藏图层
  11. excel取末尾数字_excel提取数字的方法步骤详解
  12. C语言并集编程,c语言求并集和交集的关键代码,谢谢
  13. Redisson(2-1)分布式锁实现对比 VS Java的ReentrantLock之tryLock
  14. 实验室服务器机器学习环境搭建(远程连接服务器 anaconda和tensor flow)
  15. 什么样的恐怖才是真恐怖?由最近所看的一部电影以及最喜欢的游戏系列想到的。
  16. freemarker模板生成pdf文件
  17. 安卓android_rom定制,移植,安卓Android_ROM定制、移植:第一~~八篇(全)
  18. lqr ilqr代码实例
  19. unable to read local cache ‘C:\\Users\\kingS/gensim-data\\information.json‘ during fallback, connec
  20. ipad与iphone的屏幕分辨率

热门文章

  1. MySQL事务效率测试
  2. 【学习】Java的反射机制
  3. 对java集合类的认识——基础很重要
  4. 四旋翼建模与开源飞控算法(草稿,待整理)
  5. 从数据库备份创建数据库
  6. HTML5 Boilerplate - 让页面有个好的开始
  7. android:intent flags
  8. 10个优秀的 Web UI库/框架 详细出处参考:http://www.jb51.net/web/22251.html
  9. WinForm(C#)CheckedlistBox绑定数据,并获得选中的值(ValueMember)和显示文本(DisplayMember...
  10. Lintcode 973 解题思路及c++代码