1. 程式人生 > >二、MyBatis Mapper Bean初始化深度解析

二、MyBatis Mapper Bean初始化深度解析

開發十年,就只剩下這套架構體系了! >>>   

一、問題引出

在mybatis中,mapper都是像如下一個個的介面:

package com.iwill.mybatis.dao.mapper.gen;

import com.iwill.mybatis.dao.model.UserDTO;
import com.iwill.mybatis.dao.model.UserDTOExample;
import java.util.List;
import org.apache.ibatis.annotations.Param;

public interface UserMapper {
    long countByExample(UserDTOExample example);

    int deleteByExample(UserDTOExample example);

    ...

    int updateByPrimaryKey(UserDTO record);
}

public interface UserMapperExt extends UserMapper {

    List<UserDTO> findUserListByName(String username);
}

但是在使用的時候,都是通過spring bean注入的形式使用的,如下:

@RestController
@RequestMapping("user")
public class UserController {

    @Autowired
    private UserMapperExt userMapperExt;

    @GetMapping("get-userInfo")
    public String getUserInfo() {
        List<UserDTO> userList = userMapperExt.findUserListByName("ZHANGSAN");
        return "SUCCESS";
    }

}

那麼,mybatis的mapper介面,例如:UserMapperExt是怎麼樣被例項化為一個個的spring bean的呢?

二、mybatis mapper介面被轉為spring bean的過程

mybatis mapper介面被初始化為spring bean大體分三步:

載入mybatis mapper bean的註冊器MapperScannerRegistrar---》MapperScannerRegistrar載入@MapperScan指定包路徑下面的介面為bean並註冊到容器中---》將mybatis mapper bean與動態代理實現MapperProxy繫結起來。

流程圖如下:

相關推薦

MyBatis Mapper Bean初始深度解析

開發十年,就只剩下這套架構體系了! >>>   

MyBatis Mapper Bean初始深度解析5-5

開發十年,就只剩下這套架構體系了! >>>   

MyBatis Mapper Bean初始深度解析5-4

開發十年,就只剩下這套架構體系了! >>>   

2.Java陣列_一維陣列維陣列的動態初始與靜態初始方法接收/返回/修改陣列java對陣列的排序/全拷貝/部分拷貝

Java陣列----引用資料型別,必須在使用前先初始化;否則會nullPointerException(執行時異常)。 (引用傳遞:多個棧記憶體指向同一塊堆記憶體) 1.一維陣列初始化 (1)動態初始化(宣告並開闢陣列) 資料型別[] 陣列名稱 = new 資料型別[長度]; 如

Java一維陣列定義和初始維陣列定義和初始傳參方式Arrays類

陣列 陣列是Java中的一種資料型別,是一組資料的集合,陣列中的每個成員稱為元素。Java中的陣列是類型別(引用型別),Java的同一個陣列中,只能存放相同型別的資料元素。 一維陣列 一維陣列的定義方式 一維陣列有以下兩種定義方式,推薦使用第一種定義方式 <資料型別

叉搜尋樹的初始插入刪除查詢銷燬等操作

二叉搜尋樹的概念 二叉搜尋樹又稱二叉排序樹,它或者是一顆空樹,或者是具有以下性質的二叉樹: 若它的左子樹不為空,則左子樹上所有結點的值都小於根結點的值 若它的右子樹不為空,則右子樹上所有結點的值都大於根結點的值 它的左右子樹也分別為二叉搜尋樹 例:

JAVA實驗:對陣列進行初始賦值按形式列印

題目:按照要求使用Java編碼。 (1)以型別int[][]宣告一個叫matrix的二維陣列變數,將矩陣初始化為一個5個元素的陣列。 (2)以下列方式為matrix的內部元素賦值:matrix從零開始迴圈到其長度值;例如索引為i,在每次迭代中,將matrix[i]指向一個新的整數

spring(bean初始銷燬注入,作用域)

IOC:控制反轉,也稱為依賴注入(DI)。這是一個過程。通常我們需要一個物件的時候,是主動建立物件,並且主動傳入到需要使用該物件的地方。而IOC則是由容器建立物件,注入到我們需要使用該物件的位置,兩者相比,一個主動,一個被動,被動的則是稱為依賴注入(控制反轉,由主動建立改為被動注入)。IO

Spring+Spring MVC+Mybatis整合配置AOP不生效的解決方案以及Bean初始重複載入兩次(疑難雜症)

之前上班做spring+spring mvc +hibernate開發, 2年之久不做想複習一下aop的使用,結果配置遇見aop不生效,解決而記錄! 先上程式碼直接看反例效果會明顯: 首先看一下我的程式碼的包路徑: 接下來看Spring-MVC的配置檔案部分程式碼:

深度探索C++物件模型》筆記(三)建構函式拷貝構造和初始列表

歡迎檢視系列部落格: --------------------------------------------------------------------------------------------------------------         看了這一章

POJ 2019 Cornfields 維線段樹的初始與最值查詢

popu def comm init 都沒有 data- ont emp class 模板到不行。。連更新都沒有。。。存個模板。 理解留到小結的時候再寫。 #include <algorithm> #include <iostream>

主庫備庫的初始參數文件

adding opera 4.0 span convert con oca borde client 主庫初始化參數文件-initowner.ora owner.__db_cache_size=1862270976 owner.__java_pool_size=33

Spring bean初始與銷毀的幾種方式和區別

pack ack 構造 rop struct service() throws esc println 1. <bean> 元素的 init-method/destroy-method屬性指定初始化之後 /銷毀之前調用的操作方法 2. 指定方法上加上@PostC

Vue(十)項目初始步驟

docs 需要 淘寶 gpo 文件目錄 href rul web css 提:需要安裝 node.js / npm淘寶鏡像 / webpack / vue-cli腳手架構建工具 1.創建項目 - vue init webpack framework   https://

java維數組定義初始-楊輝三角

args pan string 數組定義 static highlight pri 位數 -- public class Array2Demo2_3 { public static void main(String[] args) {

JVM基礎學習之類的加載鏈接和初始

條件 希望 運行 ring get 準備 AR return 復雜   本文我們一起討論Java類的加載、鏈接和初始化。 Java字節代碼的表現形式是字節數組(byte[]),而Java類在JVM中的表現形式是 java.lang.Class類 的對象。一個Java類從字節

MyBatis初始過程解析----廣西11選5平臺出租源碼解析

solver 原本 file code 1.3 lds elements ret variables 準備工作 為了看清楚廣西11選5平臺出租的 Q1446595067 整個初始化過程,先創建一個簡單的Java項目,目錄結構如下圖所示: 1.1 Product 產品實體類

Java構造方法成員變量初始以及靜態成員變量初始三者的先後順序是什麽樣的?

java學習 程序 tar 變量初始化 ref 優先 靜態 上海 優先級 【Java筆試真題】:構造方法、成員變量初始化以及靜態成員變量初始化三者的先後順序是什麽樣的? 【解答】:當類第一次被加載的時候,靜態變量會首先初始化,接著編譯器會把實例變量初始化為默認值,然後執行構

Spring Bean初始之後/銷燬之前執行指定方法

關於在spring  容器初始化 bean 和銷燬前所做的操作定義方式有三種: 通過@PostConstruct 和 @PreDestroy 方法 實現初始化和銷燬bean之前進行的操作 通過 在xml中定義init-method 和  destory-metho

Spring啟動流程(四)之Bean初始前後的一些操作

【Spring原始碼分析】非懶載入的單例Bean初始化前後的一些操作   再看AbstractApplicationContext的refresh方法中的細節: Spring預設載入的兩個Bean,systemProperties和systemEnvironment,