Java中Mybatis,SpringMVC,Spring的介紹及聯系
一、Mybatis
1、簡介
MyBatis 是一個基於 Java 的持久層框架,是對 jdbc 的封裝,它讓數據庫底層操作變的透明。Mybatis 的操作都是圍繞一個 sqlSessionFactory 實例展開的。Mybatis 通過配置文件關聯到各實體類的 Mapper 文件,Mapper 文件中配置瞭每個類對數據庫所需進行的 sql 語句映射。在每次與數據庫交互時,通過 sqlSessionFactory 拿到一個sqlSession,再執行 sql 命令。在 Mybatis 中,sqlSessionFactory 可以看為一個數據庫連接池,並使用的單例模式;sqlSession 就相當於一個數據庫連接,它存活在某個具體的業務請求中。 創建映射器 映射器是 Mybatis 中最重要、最復雜的組件,它由一個接口和對應的 XML 文件(或註解組成)。
2、工作原理:
mybatis通過sqlSessionFactoryBuilder從mybatis-config.xml配置文件(如上圖第一步)中構建出sqlSessionFactory(線程安全);然後調用sqlSessionFactory的openSession()方法直接開啟一個sqlSession,在通過sqlSession實例獲得Mapper.xml對象並運行Mapper.xml映射的sql語句,完成對數據庫的CRUD和事務提交,每完成一次操作之後sqlSession都需要關閉.
3、工作流程圖:
二、SpringMVC
1、MVC工作原理:
M:Model(完成業務邏輯 Service/dao/entity/)
V:View(完成界面渲染 jsp/html)
C:Controller(控制器->類似於CPU 接受請求->調用M->返回V)
1.1、MVC工作原理圖:
2.1、SpringMVC工作原理
SpringMVC是一個MVC的開源框架,SpringMVC是Spring的一個後續產品,其實就是Spring在原有基礎上,又提供瞭web應用的MVC模塊,可以簡單的把SpringMVC理解為是spring的一個模塊(類似AOP,IOC這樣的模塊),網絡上經常會說SpringMVC和Spring無縫集成,其實SpringMVC就是Spring的一個子模塊,所以根本不需要同spring進行整合。
2.2、SpringMVC中的組件:
前端控制器(DispatcherServlet):接收請求,響應結果,相當於電腦的CPU。
處理器映射器(HandlerMapping):根據URL去查找處理器
處理器(Handler):(需要程序員去寫代碼處理邏輯的)
處理器適配器(HandlerAdapter):會把處理器包裝成適配器,這樣就可以支持多種類型的處理器,類比筆記本的適配器(適配器模式的應用)
視圖解析器(ViewResovler):進行視圖解析,多返回的字符串,進行處理,可以解析成對應的頁面
2.3、SpringMvc工作原理圖
2.4、 SpringMvc工作流程
第一步:用戶發起請求到前端控制器(DispatcherServlet)
第二步:前端控制器請求處理器映射器(HandlerMapping)去查找處理器(Handler):通過xml配置或者註解進行查找
第三步:找到以後處理器映射器(HandlerMappping)像前端控制器返回執行鏈(HandlerExecutionChain)
第四步:前端控制器(DispatcherServlet)調用處理器適配器(HandlerAdapter)去執行處理器(Handler)
第五步:處理器適配器去執行Handler
第六步:Handler執行完給處理器適配器返回ModelAndView
第七步:處理器適配器向前端控制器返回ModelAndView
第八步:前端控制器請求視圖解析器(ViewResolver)去進行視圖解析
第九步:視圖解析器像前端控制器返回View
第十步:前端控制器對視圖進行渲染
第十一步:前端控制器向用戶響應結果
2.5、 SpringMVC重點
在於它的流程和註解,包括控制器、視圖解析器、視圖等內容;
三、Spring
1、簡介:
Spring是一種多層的J2EE應用程序框架,其核心就是提供一種新的機制管理業務對象及其依賴關系。它是一種容器框架,用於創建bean,維護bean之間的關系,它可以管理web層,持久層,業務層等,可以配置各個層的組件並且維護各個層的關系
2、Spring原理:
內部最核心的就是IOC瞭,動態註入,讓一個對象的創建不用new瞭,可以自動的生產,這其實就是利用java裡的反射,反射其實就是在運行時動態的去創建、調用對象,Spring就是在運行時,跟xml Spring的配置文件來動態的創建對象,和調用對象裡的方法的 。
Spring還有一個核心就是AOP這個就是面向切面編程,可以為某一類對象 進行監督和控制(也就是 在調用這類對象的具體方法的前後去調用你指定的 模塊)從而達到對一個模塊擴充的功能。這些都是通過 配置類達到的。
Spring目的:就是讓對象與對象(模塊與模塊)之間的關系沒有通過代碼來關聯,都是通過配置類說明管理的(Spring根據這些配置 內部通過反射去動態的組裝對象)
要記住:Spring是一個容器,凡是在容器裡的對象才會有Spring所提供的這些服務和功能。
Spring裡用的最經典的一個設計模式就是:模板方法模式。(這裡我都不介紹瞭,是一個很常用的設計模式), Spring裡的配置是很多的,很難都記住,但是Spring裡的精華也無非就是以上的兩點,把以上兩點跟理解瞭 也就基本上掌握瞭Spring.
3、Spring AOP與IOC
3.1、 IoC(Inversion of control): 控制反轉
1、IoC:
概念:控制權由對象本身轉向容器;由容器根據配置文件去創建實例並創建各個實例之間的依賴關系
核心:bean工廠;在Spring中,bean工廠創建的各個實例稱作bean
3.2、AOP(Aspect-Oriented Programming): 面向方面編程
1、 代理的兩種方式:
靜態代理:
- 針對每個具體類分別編寫代理類;
- 針對一個接口編寫一個代理類;
動態代理:
針對一個方面編寫一個InvocationHandler,然後借用JDK反射包中的Proxy類為各種接口動態生成相應的代理類
動態代理知識補充:
不用寫代理類,虛擬機根據真實對象實現的接口產生一個類,通過類實例化一個動態代理,在實例化動態代理時將真實對象及裝備註入到動態代理中,向客戶端公開的是動態代理,當客戶端調用動態代理方法時,動態代理根據類的反射得到真實對象的Method,調用裝備的invoke方法,將動態代理、
Method、方法參數傳與裝備的invoke方法,invoke方法在喚起method方法前或後做一些處理。
1、產生動態代理的類: java.lang.refect.Proxy 2、裝備必須實現InvocationHandler接口實現invoke方法
3.3、spring的幾個階段:
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- Java面試題沖刺第七天–Spring框架1
- Java經典面試題匯總:Spring MVC
- SpringMVC的詳細架構你瞭解嘛
- SpringMVC執行步驟、Model的使用詳解
- 一篇文章帶你學習JAVA MyBatis底層原理