Java——主流開發(fā)框架
Spring框架
Spring框架是一個分層架構(gòu),由7個定義良好的模塊組成。Spring框架構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理bean的方式,如下圖所示:
Spring框架的7個模塊
組成Spring框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或?qū)€模塊聯(lián)合實現(xiàn)。每個模塊的功能如下:
核心容器(Spring Core):核心容器提供Spring框架的基本功能。核心容器的主要組件是BeanFactory,它是工廠模式的實現(xiàn)。BeanFactory 使用控制反轉(zhuǎn) (IOC) 模式將應(yīng)用程序的配置和依賴性規(guī)范與實際的應(yīng)用程序代碼分開。
Spring 上下文(Spring Context):Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企業(yè)服務(wù),例如 JNDI、EJB、電子郵件、國際化、校驗和調(diào)度功能。
Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持 AOP。Spring AOP 模塊為基于 Spring 的應(yīng)用程序中的對象提供了事務(wù)管理服務(wù)。通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。
Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來管理異常處理和不同數(shù)據(jù)庫供應(yīng)商拋出的錯誤消息。異常層次結(jié)構(gòu)簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打開和關(guān)閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結(jié)構(gòu)。
Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關(guān)系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務(wù)和 DAO 異常層次結(jié)構(gòu)。
Spring Web 模塊:Web 上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于 Web 的應(yīng)用程序提供了上下文。所以,Spring 框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/p>
Spring MVC 框架:MVC 框架是一個全功能的構(gòu)建 Web 應(yīng)用程序的 MVC 實現(xiàn)。通過策略接口,MVC 框架變成為高度可配置的,MVC 容納了大量視圖技術(shù),其中包括 JSP、Velocity、Tiles、iText 和 POI。
Spring 框架的功能可以用在任何 J2EE 服務(wù)器中,大多數(shù)功能也適用于不受管理的環(huán)境。Spring 的核心要點是:支持不綁定到特定 J2EE 服務(wù)的可重用業(yè)務(wù)和數(shù)據(jù)訪問對象。毫無疑問,這樣的對象可以在不同 J2EE 環(huán)境 (Web 或 EJB)、獨立應(yīng)用程序、測試環(huán)境之間重用。
控制反轉(zhuǎn)模式(也稱作依賴性介入)的基本概念是:不創(chuàng)建對象,但是描述創(chuàng)建它們的方式。在代碼中不直接與對象和服務(wù)連接,但在配置文件中描述哪一個組件需要哪一項服務(wù)。容器 (在 Spring 框架中是 IOC 容器) 負(fù)責(zé)將這些聯(lián)系在一起。
面向方面的編程,即 AOP,是一種編程技術(shù),它允許程序員對橫切關(guān)注點或橫切典型的職責(zé)分界線的行為(例如日志和事務(wù)管理)進(jìn)行模塊化。AOP 的核心構(gòu)造是方面,它將那些影響多個類的行為封裝到可重用的模塊中。AOP 的功能完全集成到了 Spring 事務(wù)管理、日志和其他各種特性的上下文中。
BeanFactory? 支持兩個對象模型。
單態(tài) 模型提供了具有特定名稱的對象的共享實例,可以在查詢時對其進(jìn)行檢索。Singleton 是默認(rèn)的也是最常用的對象模型。對于無狀態(tài)服務(wù)對象很理想。
原型 模型確保每次檢索都會創(chuàng)建單獨的對象。在每個用戶都需要自己的對象時,原型模型最適合。
SpringMVC框架
MVC(Model-View-Control):Control層屬于框架部分,主要完成的工作是:封裝web請求為一個數(shù)據(jù)對象、調(diào)用業(yè)務(wù)邏輯層來處理數(shù)據(jù)對象、返回處理數(shù)據(jù)結(jié)構(gòu)以及相應(yīng)的師徒給客戶端。
SpringMVC 和 Struts2 都是表現(xiàn)層的框架,是 Spring 框架的一部分,Spring 框架中 Control 層的核心是DispatcherServlet,它的作用是將請求分發(fā)給不同的后端處理器。
Spring 的 Control 層框架使用了后端控制器來映射處理器和視圖解析器來共同完成 Control 層框架的主要工作。并且 spring 的 Control 層框架還真正地把業(yè)務(wù)層處理的數(shù)據(jù)結(jié)果和相應(yīng)的視圖拼成一個對象,即 ModelAndView 對象。
SpringMVC框架處理流程
SpringMVC框架訪問流程
MyBatis框架
MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis 使用簡單的 XML或注解用于配置和原始映射,將接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。
圖片來源于《《深入理解mybatis原理》 MyBatis的架構(gòu)設(shè)計以及實例分析》
從MyBatis代碼實現(xiàn)的角度來看,MyBatis的主要的核心部件有以下幾個:
SqlSession? ? ? ? ? ? 作為MyBatis工作的主要頂層API,表示和數(shù)據(jù)庫交互的會話,完成必要數(shù)據(jù)庫增刪改查功能
Executor? ? ? ? ? ? ? MyBatis執(zhí)行器,是MyBatis 調(diào)度的核心,負(fù)責(zé)SQL語句的生成和查詢緩存的維護(hù)
StatementHandler? ?封裝了JDBC Statement操作,負(fù)責(zé)對JDBC statement 的操作,如設(shè)置參數(shù)、將Statement結(jié)果集轉(zhuǎn)換成List集合。
ParameterHandler? ?負(fù)責(zé)對用戶傳遞的參數(shù)轉(zhuǎn)換成JDBC Statement 所需要的參數(shù),
ResultSetHandler? ? 負(fù)責(zé)將JDBC返回的ResultSet結(jié)果集對象轉(zhuǎn)換成List類型的集合;
TypeHandler? ? ? ? ? 負(fù)責(zé)java數(shù)據(jù)類型和jdbc數(shù)據(jù)類型之間的映射和轉(zhuǎn)換
MappedStatement? ?MappedStatement維護(hù)了一條
SqlSource? ? ? ? ? ? 負(fù)責(zé)根據(jù)用戶傳遞的parameterObject,動態(tài)地生成SQL語句,將信息封裝到BoundSql對象中,并返回
BoundSql? ? ? ? ? ? ?表示動態(tài)生成的SQL語句以及相應(yīng)的參數(shù)信息
Configuration? ? ? ? MyBatis所有的配置信息都維持在Configuration對象之中。
MyBatis層次結(jié)構(gòu):
圖片來源于《《深入理解mybatis原理》 MyBatis的架構(gòu)設(shè)計以及實例分析》
Hibernate框架
JDBC 代表 Java Database Connectivity ,它是提供了一組 Java API 來訪問關(guān)系數(shù)據(jù)庫的 Java 程序。這些 Java APIs 可以使 Java 應(yīng)用程序執(zhí)行 SQL 語句,能夠與任何符合 SQL 規(guī)范的數(shù)據(jù)庫進(jìn)行交互。
Hibernate框架是應(yīng)用在JavaEE三層結(jié)構(gòu)中的dao層框架
使用Hibernate框架在dao層里面做對數(shù)據(jù)庫的增刪改查操作。Hibernate框架底層是JDBC,使用Hibernate框架對JDBC輕量級的封裝,可以不需要寫復(fù)雜的JBDC代碼
Hibernate框架是開源的,輕量級的框架(Hibernate框架不需要依賴其他東西就可以直接使用)
Hibernate 優(yōu)勢
Hibernate 使用 XML 文件來處理映射 Java 類別到數(shù)據(jù)庫表格中,并且不用編寫任何代碼。
為在數(shù)據(jù)庫中直接儲存和檢索 Java 對象提供簡單的 APIs。
如果在數(shù)據(jù)庫中或任何其它表格中出現(xiàn)變化,那么僅需要改變 XML 文件屬性。
抽象不熟悉的 SQL 類型,并為我們提供工作中所熟悉的 Java 對象。
Hibernate 不需要應(yīng)用程序服務(wù)器來操作。
操控你數(shù)據(jù)庫中對象復(fù)雜的關(guān)聯(lián)。
最小化與訪問數(shù)據(jù)庫的智能提取策略。
提供簡單的數(shù)據(jù)詢問。
Hibernate應(yīng)用程序體系結(jié)構(gòu)圖
配置對象
配置對象是你在任何 Hibernate 應(yīng)用程序中創(chuàng)造的第一個 Hibernate 對象,并且經(jīng)常只在應(yīng)用程序初始化期間創(chuàng)造。它代表了 Hibernate 所需一個配置或?qū)傩晕募E渲脤ο筇峁┝藘煞N基礎(chǔ)組件。
數(shù)據(jù)庫連接:由 Hibernate 支持的一個或多個配置文件處理。這些文件是 hibernate.properties 和 hibernate.cfg.xml。
類映射設(shè)置:這個組件創(chuàng)造了 Java 類和數(shù)據(jù)庫表格之間的聯(lián)系。
SessionFactory 對象:配置對象被用于創(chuàng)造一個 SessionFactory 對象,使用提供的配置文件為應(yīng)用程序依次配置 Hibernate,并允許實例化一個會話對象。SessionFactory 是一個線程安全對象并由應(yīng)用程序所有的線程所使用。SessionFactory 是一個重量級對象所以通常它都是在應(yīng)用程序啟動時創(chuàng)造然后留存為以后使用。每個數(shù)據(jù)庫需要一個 SessionFactory 對象使用一個單獨的配置文件。所以如果你使用多種數(shù)據(jù)庫那么你要創(chuàng)造多種 SessionFactory 對象。
Session 對象:一個會話被用于與數(shù)據(jù)庫的物理連接。Session 對象是輕量級的,并被設(shè)計為每次實例化都需要與數(shù)據(jù)庫的交互。持久對象通過 Session 對象保存和檢索。Session 對象不應(yīng)該長時間保持開啟狀態(tài)因為它們通常情況下并非線程安全,并且它們應(yīng)該按照所需創(chuàng)造和銷毀。
Transaction 對象:一個事務(wù)代表了與數(shù)據(jù)庫工作的一個單元并且大部分 RDBMS 支持事務(wù)功能。在 Hibernate 中事務(wù)由底層事務(wù)管理器和事務(wù)(來自 JDBC 或者 JTA)處理。這是一個選擇性對象,Hibernate 應(yīng)用程序可能不選擇使用這個接口,而是在自己應(yīng)用程序代碼中管理事務(wù)。
Query 對象:Query 對象使用 SQL 或者 Hibernate 查詢語言(HQL)字符串在數(shù)據(jù)庫中來檢索數(shù)據(jù)并創(chuàng)造對象。一個查詢的實例被用于連結(jié)查詢參數(shù),限制由查詢返回的結(jié)果數(shù)量,并最終執(zhí)行查詢。
Criteria 對象:Criteria 對象被用于創(chuàng)造和執(zhí)行面向規(guī)則查詢的對象來檢索對象。
Java Spring
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。