Spring及相關(guān)框架知識(shí)小匯


創(chuàng)新互聯(lián)建站主營(yíng)烏魯木齊網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP軟件開(kāi)發(fā),烏魯木齊h5微信平臺(tái)小程序開(kāi)發(fā)搭建,烏魯木齊網(wǎng)站營(yíng)銷(xiāo)推廣歡迎烏魯木齊等地區(qū)企業(yè)咨詢(xún)

  一 Spring相關(guān)知識(shí)介紹

   簡(jiǎn)單點(diǎn)說(shuō),Spring是一個(gè)分層的JavaSE/EE 一站式輕量級(jí)的開(kāi)源框架。Spring致力于提供一種方法來(lái)管理你的業(yè)務(wù)對(duì)象。Spring致力于J2EE應(yīng)用的各層解決方案,而不是僅僅專(zhuān)注于某一層的方案,可以說(shuō)Spring是企業(yè)應(yīng)用的一站式選擇,貫穿于表現(xiàn)層,業(yè)務(wù)層和持久層。然而,spring并不想取代它們,而是與它們無(wú)縫整合。

控制反轉(zhuǎn)——Spring通過(guò)一種稱(chēng)作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了低耦合。當(dāng)應(yīng)用了IoC,一個(gè)對(duì)象依賴(lài)的其它對(duì)象會(huì)通過(guò)被動(dòng)的方式傳遞進(jìn)來(lái),而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴(lài)對(duì)象。你可以認(rèn)為IoC與JNDI相反——不是對(duì)象從容器中查找依賴(lài),而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴(lài)傳遞給它。

面向切面——Spring提供了面向切面編程的豐富支持,允許通過(guò)分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開(kāi)發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。

容器——Spring包含并管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配置你的每個(gè)bean如何被創(chuàng)建——基于一個(gè)可配置原型(prototype),你的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例——以及它們是如何相互關(guān)聯(lián)的。

框架——Spring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開(kāi)發(fā)留給了你。

MVC—Spring的作用是整合,但不僅僅限于整合,Spring 框架可以被看做是一個(gè)企業(yè)解決方案級(jí)別的框架??蛻?hù)端發(fā)送請(qǐng)求,服務(wù)器控制器(由DispatcherServlet實(shí)現(xiàn)的)完成請(qǐng)求的轉(zhuǎn)發(fā),控制器調(diào)用一個(gè)用于映射的類(lèi)HandlerMapping,該類(lèi)用于將請(qǐng)求映射到對(duì)應(yīng)的處理器來(lái)處理請(qǐng)求。HandlerMapping將請(qǐng)求映射到對(duì)應(yīng)的處理器Controller(相當(dāng)于Action)在Spring 當(dāng)中如果寫(xiě)一些處理器組件,一般實(shí)現(xiàn)Controller 接口,在Controller 中就可以調(diào)用一些Service 或DAO 來(lái)進(jìn)行數(shù)據(jù)操作, ModelAndView 用于存放從DAO 中取出的數(shù)據(jù),還可以存放響應(yīng)視圖的一些數(shù)據(jù)。 如果想將處理結(jié)果返回給用戶(hù),那么在Spring框架中還提供一個(gè)視圖組件ViewResolver,該組件根據(jù)Controller返回的標(biāo)示,找到對(duì)應(yīng)的視圖,將響應(yīng)response 返回給用戶(hù)。

 

視圖是一個(gè)接口,負(fù)責(zé)顯示模型;控制器表示邏輯代碼,是Controller的實(shí)現(xiàn)。

 

IOC和AOP

控制反轉(zhuǎn)模式(也稱(chēng)作依賴(lài)性注入)的基本概念是:不創(chuàng)建對(duì)象,但是描述創(chuàng)建它們的方式。在代碼中不直接與對(duì)象和服務(wù)連接,但在配置文件中描述哪一個(gè)組件需要哪一項(xiàng)服務(wù)。容器 (在Spring 框架中是 IOC 容器) 負(fù)責(zé)將這些聯(lián)系在一起。在典型的 IOC 場(chǎng)景中,容器創(chuàng)建了所有對(duì)象,并設(shè)置必要的屬性將它們連接在一起,決定什么時(shí)間調(diào)用方法。下表列出了 IOC 的一個(gè)實(shí)現(xiàn)模式。

 

Spring的基本框架:

Spring框架是一個(gè)分層架構(gòu),由 7 個(gè)定義良好的模塊組成。Spring模塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建、配置和管理 bean 的方式。組成Spring框架的每個(gè)模塊(或組件)都可以單獨(dú)存在,或者與其他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)。每個(gè)模塊的功能如下:

1、核心容器:核心容器提供 Spring 框架的基本功能(SpringCore)。核心容器的主要組件是 BeanFactory,它是工廠模式的實(shí)現(xiàn)。BeanFactory 使用控制反轉(zhuǎn)(IOC) 模式將應(yīng)用程序的配置和依賴(lài)性規(guī)范與實(shí)際的應(yīng)用程序代碼分開(kāi)。

2、Spring 上下文:Spring 上下文是一個(gè)配置文件,向 Spring框架提供上下文信息。Spring 上下文包括企業(yè)服務(wù),例如JNDI、EJB、電子郵件、國(guó)際化、校驗(yàn)和調(diào)度功能。

3、Spring AOP:通過(guò)配置管理特性,Spring AOP 模塊直接將面向切面的編程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何對(duì)象支持AOP。Spring AOP 模塊為基于 Spring 的應(yīng)用程序中的對(duì)象提供了事務(wù)管理服務(wù)。通過(guò)使用 Spring AOP,不用依賴(lài) EJB 組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。

4、Spring DAO:JDBCDAO抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來(lái)管理異常處理和不同數(shù)據(jù)庫(kù)供應(yīng)商拋出的錯(cuò)誤消息。異常層次結(jié)構(gòu)簡(jiǎn)化了錯(cuò)誤處理,并且極大地降低了需要編寫(xiě)的異常代碼數(shù)量(例如打開(kāi)和關(guān)閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結(jié)構(gòu)。

5、Spring ORM:Spring 框架插入了若干個(gè)ORM框架,從而提供了 ORM 的對(duì)象關(guān)系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有這些都遵從 Spring 的通用事務(wù)和 DAO 異常層次結(jié)構(gòu)。

6、Spring Web 模塊:Web 上下文模塊建立在應(yīng)用程序上下文模塊之上,為基于 Web 的應(yīng)用程序提供了上下文。所以,Spring框架支持與 Jakarta Struts 的集成。Web 模塊還簡(jiǎn)化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/p>

7、Spring MVC 框架:MVC框架是一個(gè)全功能的構(gòu)建 Web應(yīng)用程序的 MVC 實(shí)現(xiàn)。通過(guò)策略接口,MVC框架變成為高度可配置的,MVC 容納了大量視圖技術(shù),其中包括 JSP、Velocity、Tiles、iText 和 POI。模型由javabean構(gòu)成,存放于Map;視圖是一個(gè)接口,負(fù)責(zé)顯示模型;控制器表示邏輯代碼,是Controller的實(shí)現(xiàn)。


DI的注解形式:

   注解的作用和特性:

1、 起到了一個(gè)解釋說(shuō)明的作用

2、 注解是不能單獨(dú)存在的

3、 注解應(yīng)該標(biāo)在:類(lèi),方法,屬性,參數(shù)等

4、 應(yīng)該有一個(gè)類(lèi):該類(lèi)起的作用是解釋說(shuō)明

 

1.1  利用注解的步驟

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

啟動(dòng)注解解析器

<context:annotation-config></context:annotation-config>

1.2  原理

1、 當(dāng)啟動(dòng)spring容器的時(shí)候,容器實(shí)例化了person和student

2、 當(dāng)spring容器解析到

<context:annotation-config></context:annotation-config>的時(shí)候,spring容器會(huì)對(duì)spring容器范圍的bean進(jìn)行掃描,檢查哪些bean的哪些屬性

上有@Resource注解

3、 檢查到了該注解的時(shí)候,檢查@Resource注解的name屬性的值是否為””

如果是空

    拿注解所在的屬性的名稱(chēng)和spring配置文件中的bean中的id的值做匹配

    如果匹配成功,則賦值

    如果匹配不成功,則按照類(lèi)型進(jìn)行匹配

    如果類(lèi)型也不匹配,肯定報(bào)錯(cuò)

如果不為空

    會(huì)提取到name屬性的值,根據(jù)這個(gè)值,和spring容器中的id做匹配

    如果匹配不成功,則報(bào)錯(cuò)

 

 2.     類(lèi)掃描機(jī)制

2.1.  步驟

1、   在spring配置文件中

    <context:component-scanbase-package="cn.tedu.big1603.spring.scan.annotation">          </context:component-scan>

    2、   在相應(yīng)的類(lèi)中

       @Component

    publicclass Person {}

    ==

    <beanid=”person” class=”…Person”

     

    @Component("p")

    publicclass Person {}

        ==

        <bean id=”p”class=”…Person”>

 

2.2.  原理

1、   當(dāng)spring容器啟動(dòng)的時(shí)候,會(huì)解析到<context:component-scanbase-package="cn.tedu.big1603.spring.scan.annotation"></context:component-scan>

2、   會(huì)去base-package指定的包及子包中查找,查看哪個(gè)類(lèi)上面加有@Compontent注解

3、   會(huì)檢查該注解的value屬性是否為””

如果為“”

   會(huì)創(chuàng)建一個(gè)bean對(duì)象,bean對(duì)象的id的值就是類(lèi)名的組成,組成規(guī)則

       為首字母小寫(xiě),其他不變

如果不為“”

    Value屬性的值就是id的值

4、   上述步驟完事以后,在spring容器中有對(duì)象了。

5、   掃描所有的在spring容器中的bean,進(jìn)行@Resouce注入的業(yè)務(wù)邏輯

2.3.  總結(jié)

     總共掃描了二次,第一次是把類(lèi)放入到spring容器中,第二次是給屬性注入值,所以配置文件的內(nèi)容越少,效率越低,但是這個(gè)效率低對(duì)于web程序來(lái)說(shuō)是可以忽略的。

2.4.  三種典型化注解

    @Repository

    @service

    @controller

    的作用和@Compontent的作用一樣

 

AOP相關(guān)知識(shí)介紹:

 

在軟件業(yè),AOP為Aspect Oriented Programming的縮寫(xiě),意為:面向切面編程,通過(guò)預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。AOP是OOP的延續(xù),是軟件開(kāi)發(fā)中的一個(gè)熱點(diǎn),也是Spring框架中的一個(gè)重要內(nèi)容,是函數(shù)式編程的一種衍生范型。

可以通過(guò)預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)在不修改源代碼的情況下給程序動(dòng)態(tài)地統(tǒng)一添加功能的一種技術(shù)。利用AOP可以對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時(shí)提高了開(kāi)發(fā)的效率。

 

在Spring中提供了面向切面編程的豐富支持,允許通過(guò)分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開(kāi)發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。

 

 AOP,我們可以定義交叉的關(guān)系,并將這些關(guān)系應(yīng)用于跨模塊的、彼此不同的對(duì)象模型。


動(dòng)態(tài)代理:所謂Dynamic Proxy是這樣一種class:它是在運(yùn)行時(shí)生成的class,在生成它時(shí)你必須提供一組interface給它,然后該class就宣稱(chēng)它實(shí)現(xiàn)了這些 interface。你當(dāng)然可以把該class的實(shí)例當(dāng)作這些interface中的任何一個(gè)來(lái)用。當(dāng)然啦,這個(gè)Dynamic Proxy其實(shí)就是一個(gè)Proxy,它不會(huì)替你作實(shí)質(zhì)性的工作,在生成它的實(shí)例時(shí)你必須提供一個(gè)handler,由它接管實(shí)際的工作。

注意事項(xiàng):目標(biāo)對(duì)象和代理對(duì)象實(shí)現(xiàn)了同一個(gè)接口.


動(dòng)態(tài)代理模式實(shí)現(xiàn)該邏輯的缺點(diǎn):

       在方法判斷的時(shí)候,如果是生產(chǎn)環(huán)境,如果方法特別多,這里的判斷就相當(dāng)多

       在該類(lèi)中只處理了事務(wù),如果有權(quán)限、日志等內(nèi)容怎么辦呢?

總結(jié)

   動(dòng)態(tài)代理實(shí)現(xiàn)該邏輯也不是最好的選擇

 

二 MyBatis框架知識(shí):


     MyBatis是支持普通 SQL查詢(xún),存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis 使用簡(jiǎn)單的 XML或注解用于配置和原始映射,將接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄。

 

每個(gè)MyBatis應(yīng)用程序主要都是使用SqlSessionFactoryc創(chuàng)建實(shí)例的,一個(gè)SqlSessionFactory實(shí)例可以通過(guò)SqlSessionFactoryBuilder獲得。SqlSessionFactoryBuilder可以從一個(gè)xml配置文件或者一個(gè)預(yù)定義的配置類(lèi)的實(shí)例獲得。

用xml文件構(gòu)建SqlSessionFactory實(shí)例是非常簡(jiǎn)單的事情。推薦在這個(gè)配置中使用類(lèi)路徑資源(Classpathresource),但你可以使用任何Reader實(shí)例,包括用文件路徑或file://開(kāi)頭的url創(chuàng)建的實(shí)例。MyBatis有一個(gè)實(shí)用類(lèi)----Resources,它有很多方法,可以方便地從類(lèi)路徑及其它位置加載資源。

功能架構(gòu)講解:

我們把Mybatis的功能架構(gòu)分為三層:

(1)API接口層:提供給外部使用的接口API,開(kāi)發(fā)人員通過(guò)這些本地API來(lái)操縱數(shù)據(jù)庫(kù)。接口層一接收到調(diào)用請(qǐng)求就會(huì)調(diào)用數(shù)據(jù)處理層來(lái)完成具體的數(shù)據(jù)處理。

(2)數(shù)據(jù)處理層:負(fù)責(zé)具體的SQL查找、SQL解析、SQL執(zhí)行和執(zhí)行結(jié)果映射處理等。它主要的目的是根據(jù)調(diào)用的請(qǐng)求完成一次數(shù)據(jù)庫(kù)操作。

(3)基礎(chǔ)支撐層:負(fù)責(zé)最基礎(chǔ)的功能支撐,包括連接管理、事務(wù)管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來(lái)作為最基礎(chǔ)的組件。為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支撐。

 

MyBatis框架架構(gòu)講解:

(1)加載配置:配置來(lái)源于兩個(gè)地方,一處是配置文件,一處是Java代碼的注解,將SQL的配置信息加載成為一個(gè)個(gè)MappedStatement對(duì)象(包括了傳入?yún)?shù)映射配置、執(zhí)行的SQL語(yǔ)句、結(jié)果映射配置),存儲(chǔ)在內(nèi)存中。

(2)SQL解析:當(dāng)API接口層接收到調(diào)用請(qǐng)求時(shí),會(huì)接收到傳入SQL的ID和傳入對(duì)象(可以是Map、JavaBean或者基本數(shù)據(jù)類(lèi)型),Mybatis會(huì)根據(jù)SQL的ID找到對(duì)應(yīng)的MappedStatement,然后根據(jù)傳入?yún)?shù)對(duì)象對(duì)MappedStatement進(jìn)行解析,解析后可以得到最終要執(zhí)行的SQL語(yǔ)句和參數(shù)。


(3)SQL執(zhí)行:將最終得到的SQL和參數(shù)拿到數(shù)據(jù)庫(kù)進(jìn)行執(zhí)行,得到操作數(shù)據(jù)庫(kù)的結(jié)果。

(4)結(jié)果映射:將操作數(shù)據(jù)庫(kù)的結(jié)果按照映射的配置進(jìn)行轉(zhuǎn)換,可以轉(zhuǎn)換成HashMap、JavaBean或者基本數(shù)據(jù)類(lèi)型,并將最終結(jié)果返回。

MyBatis最強(qiáng)大的特性之一就是它的動(dòng)態(tài)語(yǔ)句功能。如果您以前有使用JDBC或者類(lèi)似框架的經(jīng)歷,您就會(huì)明白把SQL語(yǔ)句條件連接在一起是多么的痛苦,要確保不能忘記空格或者不要在columns列后面省略一個(gè)逗號(hào)等。動(dòng)態(tài)語(yǔ)句能夠完全解決掉這些痛苦。
  盡管與動(dòng)態(tài)SQL一起工作不是在開(kāi)一個(gè)party,但是MyBatis確實(shí)能通過(guò)在任何映射SQL語(yǔ)句中使用強(qiáng)大的動(dòng)態(tài)SQL來(lái)改進(jìn)這些狀況。動(dòng)態(tài)SQL元素對(duì)于任何使用過(guò)JSTL或者類(lèi)似于XML之類(lèi)的文本處理器的人來(lái)說(shuō),都是非常熟悉的。在上一版本中,需要了解和學(xué)習(xí)非常多的元素,但在MyBatis 3 中有了許多的改進(jìn),現(xiàn)在只剩下差不多二分之一的元素。MyBatis使用了基于強(qiáng)大的OGNL表達(dá)式來(lái)消除了大部分元素。


本文題目:Spring及相關(guān)框架知識(shí)小匯
文章URL:http://muchs.cn/article12/ghiggc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化域名注冊(cè)、網(wǎng)站改版、微信小程序、定制開(kāi)發(fā)外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)