一直想分析下框架的程式碼,之前也看過Spring等框架原始碼,但是看了似懂非懂的,這次要將分析的記錄下,如果發現不理解可以再來重新看下這個記錄,還是從簡單mybatis-plus來分析下,為什麼mybatis-plus?最近專案在使用這個。mybatis-plus在mybatis上做了一層擴充套件,詳細瞭解請訪問官網地址:mybatis-plus 專案依賴工具是maven, 引入的專案依賴如下:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.1.9</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatisplus-spring-boot-starter</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
接下看一下spring boot載入的mybatis-plus的配置和
複製程式碼
![mybatis plus原始碼解析(一) ---基於springboot配置載入和SqlSessionFactory的構造](https://i.iter01.com/images/ed786b11a55b11d3d3ec52e3d91db726cd6517aeaea1d77407ebf43c7529f7c7.png)
![mybatis plus原始碼解析(一) ---基於springboot配置載入和SqlSessionFactory的構造](https://i.iter01.com/images/a2268dfb4f98a11c559523ba3bb2614b3b7afa10ed5f6f304ff78cbb62d5e9cd.png)
- @Configuration是將該類加入spring容器當中,
- @ConditionalOnClass({SqlSessionFactory.class, MybatisSqlSessionFactoryBean.class})
- SqlSessionFactory,MybatisSqlSessionFactoryBean類的的依賴存在。
- @ConditionalOnBean(DataSource.class) DataSource這個例項必須存在
- @EnableConfigurationProperties(MybatisPlusProperties.class) 載入配置到MybatisPlusProperties這個類中
- @AutoConfigureAfter(DataSourceAutoConfiguration.class) 其他的類載入完之後,再載入DataSourceAutoConfiguration這個類,它主要是完成資料配置初始化。
接下來,看一下 SqlSessionFactory的構造,
@ConditionalOnMissingBean是在Spring容器中缺少bean的時候,建立SqlSessionFactory這個物件,前面已經建立了DataSource這個物件,這個例項在 這個方法中會自動注入進來,這是Spring的IOC來完成的, 這個類中,會建立一個MybatisSqlSessionFactoryBean的例項,它是實現Spring中FactoryBean介面的類,然後在這個例項中設定DataSource,VFS,ConfigLocation,MybatisConfiguraition(它是繼承與Mybatis的Configuration)等屬性
![mybatis plus原始碼解析(一) ---基於springboot配置載入和SqlSessionFactory的構造](https://i.iter01.com/images/b3695b96c1298eba7a22b91da12df92f1c17c3d6bbd7651cb8a3354d74fb1e19.png)
![mybatis plus原始碼解析(一) ---基於springboot配置載入和SqlSessionFactory的構造](https://i.iter01.com/images/3589d5d9b604ee53a52a29d70f00504bb24cb55f91dd9e076064ab5e9972b81c.png)
![mybatis plus原始碼解析(一) ---基於springboot配置載入和SqlSessionFactory的構造](https://i.iter01.com/images/2c131766d850551081a1f16dd01795880a3d577fdd94aa97ba207307ee9801b0.png)
afterPropertiesSet緊接著會呼叫 buildSqlSessionFactory()方法
![mybatis plus原始碼解析(一) ---基於springboot配置載入和SqlSessionFactory的構造](https://i.iter01.com/images/334ac96c0fa6da04ae10d9373f15f2f5ab9e35cb28b1c06c00925d08eb4ed097.png)
![mybatis plus原始碼解析(一) ---基於springboot配置載入和SqlSessionFactory的構造](https://i.iter01.com/images/b6002b6f9d8cfbb7fd84ca12457ca76162d57fe7e7e9e914fa62d477aadc0185.png)
![mybatis plus原始碼解析(一) ---基於springboot配置載入和SqlSessionFactory的構造](https://i.iter01.com/images/0706f4947bab23bd3840de60b2ad2908c4f95e54e1fe52faef52e00dcca49d33.png)
![mybatis plus原始碼解析(一) ---基於springboot配置載入和SqlSessionFactory的構造](https://i.iter01.com/images/b635d680e75c963bbdc758931a2e65d0c6f0e328fb233a9ae018d74371cf6100.png)
![mybatis plus原始碼解析(一) ---基於springboot配置載入和SqlSessionFactory的構造](https://i.iter01.com/images/aac55b542e09e69e8d97ef21a5afb970162375975e8b5ad65ab8e5cf644207c0.png)
![mybatis plus原始碼解析(一) ---基於springboot配置載入和SqlSessionFactory的構造](https://i.iter01.com/images/ce49ec60ec2912e37d3dfd22dfa163ab509665778815195be25c34bd81be3a66.png)
![mybatis plus原始碼解析(一) ---基於springboot配置載入和SqlSessionFactory的構造](https://i.iter01.com/images/986cfca178433b18fe7decb3d6b1d3adb148bc51fe81014d7197443246075e95.png)
總結: 今天主要介紹了基於springboot載入mybatis-plus的配置和SqlsessionFactory的構造,初次寫原始碼級別的分析,寫得不好,如果發現理解上的錯誤,希望大家多指教,謝謝!