精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring整合MyBatis之底層原理

原創 精選
數據庫 其他數據庫
使用起來是很簡單的,但是有沒有老鐵想過,為什么做了這么一個簡單的配置,這個Mapper就能操作數據庫了?

作者 | 波哥

審校 | 孫淑娟

如果老鐵們對Spring框架足夠熟悉,整合MyBatis其實很容易理解,當然這里假定老鐵們也已經熟悉了MyBatis框架。

在我們正常的應用開發過程中,使用MyBatis一般分為如下幾個步驟:

1.在配置類上增加MapperScan注解,例如:@MapperScan(basePackages = {"com.test.dao"},annotationClass = Mapper.class);

2.在basePackages指定的目錄下創建待MyBatis讀取的接口文件,例如:

@Mapper
public interface TestMapper {
......
}

3.在Service或者其他地方使用該Mapper來操作數據庫。

使用起來是很簡單的,但是有沒有老鐵想過,為什么做了這么一個簡單的配置,這個Mapper就能操作數據庫了?按理說這個Mapper是個接口,應該是不能被創建才對啊!如果你有這個疑問,證明你是個愛思考的好童鞋。

咱們直接進入主題。Spring要與MyBatis整合,簡單來說只要解決如下兩個問題:

一、Spring如何知道哪些類應該被管理?

要讓Spring去管理Bean的生命周期,首先需要對應的類被Spring掃描到,并且生成DeanDefinition,然后基于BeanDefinition生成Bean。下面對Spring生成BeanDefinition的方式做個小總結:

  • 包含Component、Configuration、ComponentScan、Import、ImportResource注解的類;
  • Import注解中指定的類、被Bean注解標注的方法所在的類;
  • 實現了ImportBeanDefinitionRegistrar接口,并且在registerBeanDefinitions方法中調用registry直接注冊的類;
  • 實現了ImportSelector接口,并且在selectImports方法中返回的字符串對應的類;
  • 直接調用register方法;
  • 另外Spring還提供了一個擴展,可以讓開發者自己指定需要被管理的類對應的類型:通過往includeFilters中添加注解類類型。

我們分析源碼,第一步得找到它的入口,Spring整合MyBatis的入口,毫無疑問是MapperScan這個注解,在MapperScan注解上包含Import(MapperScannerRegistrar.class)注解,Spring整合MyBatis正是用了Import和ImportBeanDefinitionRegistrar的方式。我們先通過一張流程圖來了解下整體流程,然后再慢慢品。

圖片

我們來看MapperScannerRegistrar這個類的繼承關系圖:

圖片

MapperScannerRegistrar是ImportBeanDefinitionRegistrar的實現類,Spring會去調用這個類的registerBeanDefinitions方法添加beanDefinition,這個方法中具體做了些什么呢:

獲取MapperScan注解的配置信息,比如basePackages、annotationClass,basePackages表示需要掃描的路徑,annotationClass則是指定了增加了這種注解類的類需要被Spring進行管理,比如增加了Mapper注解的類需要被Spring管理。

生成MapperScannerConfigurer這個類型的beanDefinition,并且把MapperScan注解的配置信息添加到該beanDefinition的屬性集合中。

后續Spring就會基于這個MapperScannerConfigurer做一系列文章,看下它的繼承關系:

圖片

它是BeanDefinitionRegistryPostProcessor的實現類,是一個BeanFactory后置處理器,Spring會調用該類的postProcessBeanDefinitionRegistry方法來添加beanDefinition的操作,MapperScannerConfigurer這個類中具體實現如下:

圖片

它定義了ClassPathMapperScanner這個掃描器,然后使用這個掃描器來掃描類,掃描哪些類呢?掃描有Mapper注解的類,看它的關系知道,它是ClassPathBeanDefinitionScanner的子類,而spring則是使用ClassPathBeanDefinitionScanner來進行掃描的。

圖片

為什么ClassPathMapperScanner能夠掃描到帶有Mapper注解的類呢?看上面代碼,就是通過調用registerFilters方法來添加includeFilter(實際類型是:TypeFilter),這個就是Spring提供的擴展點,讓咱們自己來指定需要被掃描的類,這里使用的是MappScan注解中annotationClass屬性配置的注解類型,我們這里配置了Mapper,所以調用scan方法開啟掃描后,Spring就會將包含Mapper注解的類掃描為BeanDefinition。注意這里的掃描能力還是調用Spring的掃描器來實現的,ClassPathMapperScanner并沒有修改,只是當掃描完成后,ClassPathMapperScanner會對掃描出的BeanDefinition進行重新處理,主要是把原來的BeanClass修改成了MapperFactoryBean.class:

圖片

而這個MapperFactoryBean是FactoryBean的實現類,老鐵們,FactoryBean這種Bean有什么特點?這個可是面試的高發點哦。

做個小小的總結:Spring掃描到有Mapper注解的類,生成BeanDefinition,并且將這一類BeanDefinition的BeanClass的值修改為MapperFactoryBean,也就是說它的類型不再是咱們自己編寫的Mapper接口了,而是一個FactoryBean,這樣Spring就能做妖了。

二、Mapper注解的類是接口

那如何實例化呢?

到這一步,其實老鐵們也大概清楚了,Spring在實例化Mapper實例時,實際上首先會實例化MapperFactoryBean,然后再調用它的getObject方法。我們知道在Java里面接口是肯定不能被實例化的,那這個被實例化的對象只能是一個代理對象,所以我們有理由猜想這個getObject方法應該是用來創建代理對象的。要創建代理對象,得從以下兩個方面著手:

1.準備工作

這里Spring準備的是接口類型和創建代理對象的代理工廠。具體如何準備的呢?來看上述MapperFactoryBean類型的整體繼承關系:

圖片

它實現了InitializingBean,于是可以知道,在MapperFactoryBean初始化完成后,Spring會調用它的afterPropertiesSet方法,從而會執行到checkDaoConfig方法:

圖片

在該方法中調用configuration的addMapper方法,這個方法里面到底做了啥?

圖片

看出門道了嗎?其實就是使用Mapper的接口類型作為key,MapperProxyFactory做為value,然后添加到mapperRegistry對象的Map集合中,注意這個type同時也是MapperProxyFactory對象的構造參數哦。

2.實例化

上述動作已經準備好了,接下來就應該是創建了。Spring在創建完成MapperFactoryBean對象后,最終會調用它的getObject方法來獲得真實的對象:

圖片

圖片

圖片

getObject方法中,會調用getMapper方法,該方法中從knowMappers這個Map集合中拿到MapperProxyFactory對象,這個對象不就是我們在準備階段添加的嘛!它就是用來創建代理對象的工廠。

圖片

從上面代碼中也不難看出,確實是為咱們自己的接口創建了代理對象,而代理類的處理類則是MapperProxy對象,也就是說對所有接口對象的調用,都會進入MapperProxy的Invoke方法,至此Spring成功對接MyBatis。

作者介紹

波哥,互聯行業從業10余年,先后擔任項目總監及架構師。目前專攻技術,喜歡研究技術原理。技術全面,主攻java,精通JVM底層機制及Spring全家桶底層框架原理,熟練掌握當前主流的中間件、服務網格等技術原理。

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2021-11-10 11:37:48

Spring整合 Mybatis

2020-11-09 10:16:41

Mybatis

2018-11-09 09:34:05

面試Spring Clou底層

2024-01-29 08:00:00

架構微服務開發

2017-05-12 15:47:15

Spring BootMybatis Ann Web

2023-04-28 08:30:56

MyBatis架構API

2021-08-29 07:41:48

數據HashMap底層

2024-06-13 00:54:19

2020-11-05 11:14:29

Docker底層原理

2021-08-31 07:36:22

LinkedListAndroid數據結構

2023-01-04 07:54:03

HashMap底層JDK

2024-01-05 09:00:00

SpringMVC軟件

2023-10-18 10:55:55

HashMap

2022-12-19 08:00:00

SpringBootWeb開發

2021-07-05 07:51:43

JVM底層Python

2021-07-23 13:34:50

MySQL存儲InnoDB

2009-06-19 10:00:37

Struts和Spri

2009-06-18 15:24:08

Spring OSGi

2016-12-14 09:03:34

springhibernate異常

2021-01-08 08:34:09

Synchronize線程開發技術
點贊
收藏

51CTO技術棧公眾號

欧美黑粗硬大| 国产三级电影在线观看| 波多野结衣在线观看一区二区| 91激情在线视频| 天天综合狠狠精品| 国产欧美日韩成人| 亚洲激情精品| 亚洲网站视频福利| 四川一级毛毛片| 美女高潮在线观看| 中文字幕国产一区二区| 91在线观看免费高清| 国产亚洲成人精品| 欧美日韩播放| 欧美一级精品在线| 国内精品视频一区二区三区| 免费毛片在线| 麻豆传媒一区二区三区| 久久久久久中文| 精品人伦一区二区三电影| 欧美一级做一级爱a做片性| 亚洲狠狠丁香婷婷综合久久久| 九九99久久| 亚洲一级在线播放| 亚洲精华国产欧美| 日韩中文字幕在线观看| 国产a级黄色片| 国产福利亚洲| 午夜精品久久久久久久99水蜜桃| 日韩一本精品| 男人天堂手机在线观看| 日本不卡视频一二三区| 欧美激情精品久久久久久大尺度| 久操视频免费看| 日韩成人在线看| 婷婷综合另类小说色区| 一区二区三区四区五区视频| 日韩一区免费视频| 精品一区二区三区在线播放| 欧美中文在线视频| 免费一级全黄少妇性色生活片| 男男gay无套免费视频欧美| 日韩欧美在线影院| 激情视频免费网站| 超碰个人在线| 国产精品久久一级| 欧美最大成人综合网| 亚洲国产精品suv| 日韩不卡一二三区| 欧美孕妇性xx| 日韩欧美a级片| 欧美激情五月| 欧美成年人视频网站| 成熟人妻av无码专区| 日本天堂一区| 日韩欧美国产精品| 午夜不卡福利视频| 成人日韩av| 91国产精品成人| 精品视频一区二区在线| 性国裸体高清亚洲| 无码av免费一区二区三区试看| 欧洲精品视频在线| 成人免费在线| 亚洲三级免费观看| 一区二区三区四区五区视频 | 99综合精品| 欧美成人精品在线| 日韩福利小视频| 国产99久久久国产精品成人免费| 亚洲电影在线看| 中文字幕天堂av| 成人看片爽爽爽| 精品欧美一区二区三区精品久久| 麻豆传媒在线看| 日韩一区网站| 精品99999| 漂亮人妻被黑人久久精品| 亚洲精品一区在线| 精品粉嫩超白一线天av| 日本69式三人交| 欧美挤奶吃奶水xxxxx| 日韩精品免费在线| 精品人妻少妇嫩草av无码| 妖精视频一区二区三区免费观看| 国产网站欧美日韩免费精品在线观看| 亚洲综合自拍网| 国产videos久久| 日韩在线观看网址| www.毛片com| 91精品动漫在线观看| 日韩视频免费在线| 精品无码久久久久久久久| 99日韩精品| 国产精品ⅴa在线观看h| 国产视频1区2区| 美女一区二区久久| 99在线观看视频网站| 人妻少妇精品无码专区久久| 久久精品一区二区三区不卡牛牛| 亚洲av综合色区| 亚洲天堂av影院| 欧美电影影音先锋| 成人影视免费观看| 女人色偷偷aa久久天堂| 日韩av手机在线| 不卡视频免费在线观看| 91亚洲精华国产精华精华液| 亚洲美女搞黄| 日本黄色免费在线| 日韩一区二区在线看片| 国产熟女一区二区| 99成人精品| 亚洲xxxx3d| 国产三级在线| 亚洲国产最新| 99视频在线观看一区三区| 午夜精品电影在线观看| www.九色在线| 日韩亚洲欧美成人一区| 国产成人精品视频免费| 国产乱码精品| www.久久爱.cn| 免费在线午夜视频| 在线观看日韩精品| 国产夫妻性爱视频| 亚洲视频一二| 91久久爱成人| 毛片在线看网站| 欧洲一区二区三区在线| 中文字幕在线免费看线人| 国内自拍一区| 26uuu日韩精品一区二区| xxxx国产精品| 亚洲精品你懂的| 一区二区三区国产免费| 最新精品国偷自产在线| 97国产在线视频| 亚洲精品无遮挡| 亚洲精品高清在线观看| 深夜福利网站在线观看| 亚洲老妇激情| 国产精品专区h在线观看| yw视频在线观看| 色偷偷久久一区二区三区| 欧美成人午夜精品免费| 国产日韩一区二区三区在线| 国产一区二区中文字幕免费看| 免费在线播放电影| 日韩视频在线永久播放| 久久一级黄色片| 国产成人8x视频一区二区| 日本福利视频网站| 一区中文字幕| 高清亚洲成在人网站天堂| 六月丁香综合网| 亚洲妇熟xx妇色黄| 亚洲 欧美 日韩在线| 一区二区三区国产在线| 久久久久国产精品视频| 久九九久频精品短视频| 亚洲欧美综合v| 中文字幕精品在线观看| 中文字幕一区二区三区四区| 天堂av2020| 午夜久久福利| 精品网站在线看| 成人啊v在线| www.亚洲人.com| 精品人妻无码一区二区| 午夜精品在线视频一区| av小说在线观看| 麻豆久久一区二区| 丰满人妻一区二区三区53号| avtt综合网| 国产91精品在线播放| 欧美日韩在线看片| 欧美精品一区在线观看| 区一区二在线观看| **欧美大码日韩| 男女性杂交内射妇女bbwxz| 香蕉久久夜色精品| 亚洲a∨一区二区三区| 日日夜夜精品视频| 欧洲亚洲女同hd| 麻豆最新免费在线视频| 亚洲国产精品va在线看黑人动漫| 波多野结衣啪啪| 亚洲日本中文字幕区| 韩国三级hd两男一女| 日韩精品电影一区亚洲| 9191国产视频| 国产精品欧美三级在线观看| 成人免费黄色网| 免费看男女www网站入口在线| 在线观看视频99| 性生活黄色大片| 欧美亚洲国产一区二区三区va | 日韩精品丝袜美腿| 国产精品欧美在线| 国产h片在线观看| 最新的欧美黄色| 天堂网在线观看视频| 欧美精品三级日韩久久| 日韩 欧美 综合| 亚洲欧美偷拍卡通变态| 一级性生活大片| 国产成人精品三级麻豆| 国产又猛又黄的视频| 亚洲精品一级| 蜜臀av.com| 大胆日韩av| 清纯唯美一区二区三区| 97品白浆高清久久久久久| 国产欧美一区二区三区在线| 色是在线视频| 欧美极品少妇xxxxⅹ免费视频| av网站无病毒在线| 国产丝袜一区二区| 亚洲福利在线观看视频| 欧美丰满高潮xxxx喷水动漫| 性高潮视频在线观看| 岛国av午夜精品| 日本三级网站在线观看| 亚洲欧洲成人自拍| 黄色三级生活片| 久久天堂av综合合色蜜桃网| 尤物网站在线观看| 国产成人精品综合在线观看| 一级片视频免费观看| 日韩国产欧美在线观看| 国产日韩一区二区在线| 国产婷婷精品| 欧美午夜性视频| 亚洲天堂男人| 日韩成人手机在线| 欧美激情1区| 国产 欧美 日本| 欧美日韩理论| 日本一级黄视频| 综合国产在线| 成人一区二区av| 午夜精品国产| 亚洲国产精品无码观看久久| 国内一区二区三区| 日韩小视频网站| 亚洲精品九九| 999在线观看视频| 亚洲高清毛片| 国产视频九色蝌蚪| 久久婷婷一区| 国产三级日本三级在线播放| 久久精品123| 亚洲精品高清无码视频| 日本不卡一区二区| 加勒比av中文字幕| 国产一区二区不卡| 免费看91视频| 99久久99久久综合| 中文字幕免费高清| 国产精品伦一区二区三级视频| 男人天堂资源网| 亚洲欧美色图小说| 国产一级aa大片毛片| 激情懂色av一区av二区av| 五月婷婷色丁香| 欧美综合色免费| 91欧美日韩麻豆精品| 日韩一区二区影院| 天天综合网天天综合| 亚洲欧美中文日韩v在线观看| 岛国在线视频| 久久成人av网站| 超碰97免费在线| 国产成人精品免费久久久久 | 宅男噜噜噜66一区二区| 噼里啪啦国语在线观看免费版高清版| 日韩不卡一二三区| 日韩av加勒比| 99re热视频这里只精品| jizz中文字幕| 夜夜嗨av一区二区三区四季av| 人人干人人干人人干| 欧美在线制服丝袜| wwwxxxx国产| 亚洲视频欧美视频| 在线免费观看a视频| 国产97在线观看| 欧美.com| 日本视频一区二区不卡| 亚洲成av人片乱码色午夜| 精品欧美一区免费观看α√| 免费在线观看成人| 美女黄色一级视频| 国产精品乱码一区二三区小蝌蚪| 国产亚洲精品av| 91国偷自产一区二区开放时间| av加勒比在线| 亚洲三级av在线| 亚洲第一图区| 国产精品激情自拍| 国产精品香蕉| 五月婷婷综合色| 国产精品色网| 欧美老女人bb| 国产精品污网站| 日韩xxxxxxxxx| 欧美一级片在线看| 东热在线免费视频| 91国内产香蕉| 亚洲一区二区三区四区电影| 亚洲福利av| 视频在线在亚洲| 午夜剧场免费看| 亚洲美女视频在线观看| 中文字幕人妻丝袜乱一区三区| 亚洲精品wwwww| 欧美xxxx免费虐| 成人免费视频97| 日本在线电影一区二区三区| 久久精品免费一区二区| 成人v精品蜜桃久久一区| 四虎永久免费在线| 欧美日韩日日夜夜| 福利在线播放| 欧美亚洲激情在线| 麻豆精品av| a级黄色小视频| 成人少妇影院yyyy| 精品爆乳一区二区三区无码av| 欧美日韩高清一区| av电影在线网| 国产精品视频网站| 日韩理论电影| 国产小视频精品| 国产视频911| 无码人妻黑人中文字幕| 日韩精品视频在线观看免费| 91超碰在线播放| 国产精品日韩二区| 亚洲欧美一级二级三级| 免费高清视频在线观看| 伊人色综合久久天天人手人婷| 国产精品一区二区黑人巨大| xvideos国产精品| 欧美大片网站| 国产又黄又爽免费视频| 精品一二线国产| 最新一区二区三区| 欧美一区二区三区在线观看视频| 国产福利视频在线| 亚洲在线www| 狠狠干成人综合网| 国产chinese中国hdxxxx| 精品成人av一区| 国产二区视频在线观看| 国产精品美女无圣光视频| 欧美疯狂party性派对| 九九九九九国产| 一区二区三区中文在线观看| 亚洲精品911| 国产91精品久久久久久久| 少妇精品久久久一区二区| 色片在线免费观看| 亚洲精品一二三| 无码精品人妻一区二区| 国产成人拍精品视频午夜网站| 成人在线国产| 制服下的诱惑暮生| 亚洲超碰精品一区二区| 国产在线观看黄| 成人xxxxx| 亚洲黄色大片| 免费在线观看a视频| 日韩三级高清在线| 成人影院大全| 亚洲免费av网| 成人av动漫在线| 波多野结衣视频网址| 久久九九亚洲综合| 精品中国亚洲| 婷婷六月天在线| 伊人性伊人情综合网| 日本福利午夜视频在线| 国产三级精品网站| 一区福利视频| 手机看片日韩av| 欧美成人综合网站| 日韩免费电影| 国产乱人伦精品一区二区三区| 久久综合给合久久狠狠狠97色69| 91精品视频免费在线观看| 国模叶桐国产精品一区| 色爱综合网欧美| 亚洲一区二区在线播放| 成人在线观看免费| 97超碰人人看人人| 日日夜夜精品视频天天综合网| 午夜69成人做爰视频| 亚洲人成免费电影|