一 Spring相關(guān)知識介紹
簡單點說,Spring是一個分層的JavaSE/EE 一站式輕量級的開源框架。Spring致力于提供一種方法來管理你的業(yè)務(wù)對象。Spring致力于J2EE應(yīng)用的各層解決方案,而不是僅僅專注于某一層的方案,可以說Spring是企業(yè)應(yīng)用的一站式選擇,貫穿于表現(xiàn)層,業(yè)務(wù)層和持久層。然而,spring并不想取代它們,而是與它們無縫整合。
控制反轉(zhuǎn)——Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進了低耦合。當(dāng)應(yīng)用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創(chuàng)建或者查找依賴對象。你可以認(rèn)為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。
面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)(例如審計(auditing)和事務(wù)(transaction)管理)進行內(nèi)聚性的開發(fā)。應(yīng)用對象只實現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識)其它的系統(tǒng)級關(guān)注點,例如日志或事務(wù)支持。
容器——Spring包含并管理應(yīng)用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創(chuàng)建——基于一個可配置原型(prototype),你的bean可以創(chuàng)建一個單獨的實例或者每次需要時都生成一個新的實例——以及它們是如何相互關(guān)聯(lián)的。
框架——Spring可以將簡單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對象被聲明式地組合,典型地是在一個XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開發(fā)留給了你。
MVC—Spring的作用是整合,但不僅僅限于整合,Spring 框架可以被看做是一個企業(yè)解決方案級別的框架??蛻舳税l(fā)送請求,服務(wù)器控制器(由DispatcherServlet實現(xiàn)的)完成請求的轉(zhuǎn)發(fā),控制器調(diào)用一個用于映射的類HandlerMapping,該類用于將請求映射到對應(yīng)的處理器來處理請求。HandlerMapping將請求映射到對應(yīng)的處理器Controller(相當(dāng)于Action)在Spring 當(dāng)中如果寫一些處理器組件,一般實現(xiàn)Controller 接口,在Controller 中就可以調(diào)用一些Service 或DAO 來進行數(shù)據(jù)操作, ModelAndView 用于存放從DAO 中取出的數(shù)據(jù),還可以存放響應(yīng)視圖的一些數(shù)據(jù)。 如果想將處理結(jié)果返回給用戶,那么在Spring框架中還提供一個視圖組件ViewResolver,該組件根據(jù)Controller返回的標(biāo)示,找到對應(yīng)的視圖,將響應(yīng)response 返回給用戶。
視圖是一個接口,負(fù)責(zé)顯示模型;控制器表示邏輯代碼,是Controller的實現(xiàn)。
IOC和AOP
控制反轉(zhuǎn)模式(也稱作依賴性注入)的基本概念是:不創(chuàng)建對象,但是描述創(chuàng)建它們的方式。在代碼中不直接與對象和服務(wù)連接,但在配置文件中描述哪一個組件需要哪一項服務(wù)。容器 (在Spring 框架中是 IOC 容器) 負(fù)責(zé)將這些聯(lián)系在一起。在典型的 IOC 場景中,容器創(chuàng)建了所有對象,并設(shè)置必要的屬性將它們連接在一起,決定什么時間調(diào)用方法。下表列出了 IOC 的一個實現(xiàn)模式。
Spring的基本框架:
Spring框架是一個分層架構(gòu),由 7 個定義良好的模塊組成。Spring模塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理 bean 的方式。組成Spring框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯(lián)合實現(xiàn)。每個模塊的功能如下:
1、核心容器:核心容器提供 Spring 框架的基本功能(SpringCore)。核心容器的主要組件是 BeanFactory,它是工廠模式的實現(xiàn)。BeanFactory 使用控制反轉(zhuǎn)(IOC) 模式將應(yīng)用程序的配置和依賴性規(guī)范與實際的應(yīng)用程序代碼分開。
2、Spring 上下文:Spring 上下文是一個配置文件,向 Spring框架提供上下文信息。Spring 上下文包括企業(yè)服務(wù),例如JNDI、EJB、電子郵件、國際化、校驗和調(diào)度功能。
3、Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向切面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持AOP。Spring AOP 模塊為基于 Spring 的應(yīng)用程序中的對象提供了事務(wù)管理服務(wù)。通過使用 Spring AOP,不用依賴 EJB 組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。
4、Spring DAO:JDBCDAO抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來管理異常處理和不同數(shù)據(jù)庫供應(yīng)商拋出的錯誤消息。異常層次結(jié)構(gòu)簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數(shù)量(例如打開和關(guān)閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結(jié)構(gòu)。
5、Spring ORM:Spring 框架插入了若干個ORM框架,從而提供了 ORM 的對象關(guān)系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有這些都遵從 Spring 的通用事務(wù)和 DAO 異常層次結(jié)構(gòu)。
6、Spring Web 模塊:Web 上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于 Web 的應(yīng)用程序提供了上下文。所以,Spring框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/p>
7、Spring MVC 框架:MVC框架是一個全功能的構(gòu)建 Web應(yīng)用程序的 MVC 實現(xiàn)。通過策略接口,MVC框架變成為高度可配置的,MVC 容納了大量視圖技術(shù),其中包括 JSP、Velocity、Tiles、iText 和 POI。模型由javabean構(gòu)成,存放于Map;視圖是一個接口,負(fù)責(zé)顯示模型;控制器表示邏輯代碼,是Controller的實現(xiàn)。
DI的注解形式:
注解的作用和特性:
1、 起到了一個解釋說明的作用
2、 注解是不能單獨存在的
3、 注解應(yīng)該標(biāo)在:類,方法,屬性,參數(shù)等
4、 應(yīng)該有一個類:該類起的作用是解釋說明
public class Person {
@Resource
private Student student;
public void say(){
this.student.student();
}
}
注意:@Resource注解
在spring的配置文件中
要導(dǎo)入命名
xmlns:context=http://www.springframework.org/schema/context
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
啟動注解解析器
1、 當(dāng)啟動spring容器的時候,容器實例化了person和student
2、 當(dāng)spring容器解析到
上有@Resource注解
3、 檢查到了該注解的時候,檢查@Resource注解的name屬性的值是否為””
如果是空
拿注解所在的屬性的名稱和spring配置文件中的bean中的id的值做匹配
如果匹配成功,則賦值
如果匹配不成功,則按照類型進行匹配
如果類型也不匹配,肯定報錯
如果不為空
會提取到name屬性的值,根據(jù)這個值,和spring容器中的id做匹配
如果匹配不成功,則報錯
2. 類掃描機制
1、 在spring配置文件中
2、 在相應(yīng)的類中
@Component
publicclass Person {}
==
@Component("p") publicclass Person {} == 1、 當(dāng)spring容器啟動的時候,會解析到 2、 會去base-package指定的包及子包中查找,查看哪個類上面加有@Compontent注解 3、 會檢查該注解的value屬性是否為”” 如果為“” 會創(chuàng)建一個bean對象,bean對象的id的值就是類名的組成,組成規(guī)則 為首字母小寫,其他不變 如果不為“” Value屬性的值就是id的值 4、 上述步驟完事以后,在spring容器中有對象了。 5、 掃描所有的在spring容器中的bean,進行@Resouce注入的業(yè)務(wù)邏輯 總共掃描了二次,第一次是把類放入到spring容器中,第二次是給屬性注入值,所以配置文件的內(nèi)容越少,效率越低,但是這個效率低對于web程序來說是可以忽略的。 @Repository @service @controller 的作用和@Compontent的作用一樣 AOP相關(guān)知識介紹: 在軟件業(yè),AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預(yù)編譯方式和運行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術(shù)。AOP是OOP的延續(xù),是軟件開發(fā)中的一個熱點,也是Spring框架中的一個重要內(nèi)容,是函數(shù)式編程的一種衍生范型。 可以通過預(yù)編譯方式和運行期動態(tài)代理實現(xiàn)在不修改源代碼的情況下給程序動態(tài)地統(tǒng)一添加功能的一種技術(shù)。利用AOP可以對業(yè)務(wù)邏輯的各個部分進行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發(fā)的效率。 在Spring中提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)(例如審計(auditing)和事務(wù)(transaction)管理)進行內(nèi)聚性的開發(fā)。應(yīng)用對象只實現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識)其它的系統(tǒng)級關(guān)注點,例如日志或事務(wù)支持。 AOP,我們可以定義交叉的關(guān)系,并將這些關(guān)系應(yīng)用于跨模塊的、彼此不同的對象模型。 動態(tài)代理:所謂Dynamic Proxy是這樣一種class:它是在運行時生成的class,在生成它時你必須提供一組interface給它,然后該class就宣稱它實現(xiàn)了這些 interface。你當(dāng)然可以把該class的實例當(dāng)作這些interface中的任何一個來用。當(dāng)然啦,這個Dynamic Proxy其實就是一個Proxy,它不會替你作實質(zhì)性的工作,在生成它的實例時你必須提供一個handler,由它接管實際的工作。 注意事項:目標(biāo)對象和代理對象實現(xiàn)了同一個接口. 動態(tài)代理模式實現(xiàn)該邏輯的缺點: 在方法判斷的時候,如果是生產(chǎn)環(huán)境,如果方法特別多,這里的判斷就相當(dāng)多 在該類中只處理了事務(wù),如果有權(quán)限、日志等內(nèi)容怎么辦呢? 總結(jié) 動態(tài)代理實現(xiàn)該邏輯也不是最好的選擇 二 MyBatis框架知識: MyBatis是支持普通 SQL查詢,存儲過程和高級映射的優(yōu)秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis 使用簡單的 XML或注解用于配置和原始映射,將接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。 每個MyBatis應(yīng)用程序主要都是使用SqlSessionFactoryc創(chuàng)建實例的,一個SqlSessionFactory實例可以通過SqlSessionFactoryBuilder獲得。SqlSessionFactoryBuilder可以從一個xml配置文件或者一個預(yù)定義的配置類的實例獲得。 用xml文件構(gòu)建SqlSessionFactory實例是非常簡單的事情。推薦在這個配置中使用類路徑資源(Classpathresource),但你可以使用任何Reader實例,包括用文件路徑或file://開頭的url創(chuàng)建的實例。MyBatis有一個實用類----Resources,它有很多方法,可以方便地從類路徑及其它位置加載資源。 功能架構(gòu)講解: 我們把Mybatis的功能架構(gòu)分為三層: (1)API接口層:提供給外部使用的接口API,開發(fā)人員通過這些本地API來操縱數(shù)據(jù)庫。接口層一接收到調(diào)用請求就會調(diào)用數(shù)據(jù)處理層來完成具體的數(shù)據(jù)處理。 (2)數(shù)據(jù)處理層:負(fù)責(zé)具體的SQL查找、SQL解析、SQL執(zhí)行和執(zhí)行結(jié)果映射處理等。它主要的目的是根據(jù)調(diào)用的請求完成一次數(shù)據(jù)庫操作。 (3)基礎(chǔ)支撐層:負(fù)責(zé)最基礎(chǔ)的功能支撐,包括連接管理、事務(wù)管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作為最基礎(chǔ)的組件。為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支撐。 MyBatis框架架構(gòu)講解: (1)加載配置:配置來源于兩個地方,一處是配置文件,一處是Java代碼的注解,將SQL的配置信息加載成為一個個MappedStatement對象(包括了傳入?yún)?shù)映射配置、執(zhí)行的SQL語句、結(jié)果映射配置),存儲在內(nèi)存中。 (2)SQL解析:當(dāng)API接口層接收到調(diào)用請求時,會接收到傳入SQL的ID和傳入對象(可以是Map、JavaBean或者基本數(shù)據(jù)類型),Mybatis會根據(jù)SQL的ID找到對應(yīng)的MappedStatement,然后根據(jù)傳入?yún)?shù)對象對MappedStatement進行解析,解析后可以得到最終要執(zhí)行的SQL語句和參數(shù)。 (3)SQL執(zhí)行:將最終得到的SQL和參數(shù)拿到數(shù)據(jù)庫進行執(zhí)行,得到操作數(shù)據(jù)庫的結(jié)果。 (4)結(jié)果映射:將操作數(shù)據(jù)庫的結(jié)果按照映射的配置進行轉(zhuǎn)換,可以轉(zhuǎn)換成HashMap、JavaBean或者基本數(shù)據(jù)類型,并將最終結(jié)果返回。 MyBatis最強大的特性之一就是它的動態(tài)語句功能。如果您以前有使用JDBC或者類似框架的經(jīng)歷,您就會明白把SQL語句條件連接在一起是多么的痛苦,要確保不能忘記空格或者不要在columns列后面省略一個逗號等。動態(tài)語句能夠完全解決掉這些痛苦。 另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。2.2. 原理
2.3. 總結(jié)
2.4. 三種典型化注解
盡管與動態(tài)SQL一起工作不是在開一個party,但是MyBatis確實能通過在任何映射SQL語句中使用強大的動態(tài)SQL來改進這些狀況。動態(tài)SQL元素對于任何使用過JSTL或者類似于XML之類的文本處理器的人來說,都是非常熟悉的。在上一版本中,需要了解和學(xué)習(xí)非常多的元素,但在MyBatis 3 中有了許多的改進,現(xiàn)在只剩下差不多二分之一的元素。MyBatis使用了基于強大的OGNL表達(dá)式來消除了大部分元素。
當(dāng)前文章:Spring及相關(guān)框架知識小匯-創(chuàng)新互聯(lián)
鏈接URL:http://weahome.cn/article/gghog.html