日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/4/16 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybatis 自定义函数_JDK动态代理一定要有代理对象吗?请你结合Mybatis回答 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

動態代理

有一段時間沒有寫文章了, 主要是回想起這兩年多的時間,多多少少,每個知識點差不多都有寫到了, 一時也想不起什么新鮮的知識分享給大家.今天寫動態代理,主要是在看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回答的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。