




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第四章 Spring2.0業(yè)務(wù)邏輯層技術(shù)教學(xué)內(nèi)容 Spring 簡介 有關(guān)知識補充 Spring 框架 Spring 配置文件34.1 Spring簡介概述Spring是一個開源框架,是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。 目的:解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性。功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能 。范圍:任何Java應(yīng)用 。簡單來說,Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。 44.1 Spring簡介概述輕量從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發(fā)布。并且S
2、pring所需的處理開銷也是微不足道的。非侵入 在應(yīng)用中,一般不需要引用springjar包里的類??刂品崔D(zhuǎn)Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進了松耦合。當(dāng)應(yīng)用了IoC,某一接口的具體實現(xiàn)類的選擇控制權(quán)從調(diào)用類中移除,轉(zhuǎn)交給第三方裁決。 面向切面Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)(例如審計(auditing)和事務(wù)()管理)進行內(nèi)聚性的開發(fā)。應(yīng)用對象只實現(xiàn)它們應(yīng)該做的完成業(yè)務(wù)邏輯僅此而已。它們并不負(fù)責(zé)其它的系統(tǒng)級關(guān)注點,例如日志或事務(wù)支持。 54.1 Spring簡介容器Spring即是一個容器又是一個框架。容器Spring包含并管
3、理應(yīng)用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創(chuàng)建基于一個可配置原型(prototype),bean可以創(chuàng)建一個單獨的實例或者每次需要時都生成一個新的實例以及它們是如何相互關(guān)聯(lián)的。 框架Spring提供了很多基礎(chǔ)的與業(yè)務(wù)邏輯無關(guān)的功能,比如:事務(wù)管理、持久化框架集成等等,使用Spring框架,開發(fā)人員可以專注于業(yè)務(wù)邏輯開發(fā),這個意義上講它是一個框架。 4.1 Spring簡介容器借助于Spring,各種Java EE技術(shù)和服務(wù)的使用得到了大大簡化,因為POJO (普通Java對象,與編程模式無關(guān))編程模型被Spring引入到Java EE的應(yīng)用開發(fā)中。為
4、了使POJO編程模型在Spring框架中可用,Spring引入了Spring DI容器和Spring AOP實現(xiàn)技術(shù),它們在倡導(dǎo)POJO編程模型方面的功勞是最大的 。4.1 Spring簡介容器Spring 提供的控制反轉(zhuǎn)(DI)容器能夠管理POJO及各種Java組件。DI負(fù)責(zé)POJO的管理,比如為它提供事務(wù)服務(wù)、生命周期服務(wù)、線程服務(wù)、緩存服務(wù)和安全性服務(wù)等。與此同時,AOP技術(shù)使得應(yīng)用程序能夠透明地享受到Java EE容器提供的企業(yè)級的服務(wù)(如JMX、JCA CCI和JMS) 。Spring DI容器針對各種DAO層集成技術(shù)(如Hibernate、JPA和JDBC)、Java EE服務(wù)及技
5、術(shù)提供了一流的集成支持。 4.1 Spring簡介框架 Spring框架是連接Struts與Hibernate的橋梁,同時它很好地處理了業(yè)務(wù)邏輯。 Spring框架提供的控制反轉(zhuǎn)和面向方面編程、插件式架構(gòu)降低了應(yīng)用程序之間的依賴性。借助于XML定義文件,開發(fā)者能夠在程序運行時連接不同的組件。Spring基本概念I(lǐng)oC Inverse of ControlDI Dependence InjectionAOP面向接口面向抽象核心容器核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory(ApplicationContext).BeanFactory 使用控制反轉(zhuǎn)
6、(IoC) 模式將應(yīng)用程序的配置和依賴性規(guī)范與實際的應(yīng)用程序代碼分開4.1 Spring簡介概念4.2.1 POJO類補充POJO,簡單的Java對象(Plain Ordinary Java Objects)實際就是普通JavaBeans,使用POJO名稱是為了避免和EJB混淆起來, 而且簡稱比較直接. 其中有一些屬性及其getter setter方法的類。Entity Bean(實體Bean)是持久數(shù)據(jù)組件,代表存儲在外部介質(zhì)中的持久(Persistence)對象或者已有的企業(yè)應(yīng)用系統(tǒng)資源。簡單地講,一個Entity Bean可以代表數(shù)據(jù)庫中的一行記錄,多個客戶端應(yīng)用能夠以共享方式訪問表示該
7、數(shù)據(jù)庫記錄的Entity Bean。4.2.2 工廠模式知識補充在面向?qū)ο蟮木幊讨?,工廠模式是一種經(jīng)常被使用到的模式。工廠模式就是專門負(fù)責(zé)將大量有共同接口的類實例化,而且不必事先知道每次是要實例化哪一個類的模式。4.2.2 工廠模式知識補充X-PersonXy-ChineseXz-American工廠類-PersonFactory4.2.2 工廠模式知識補充返回的究竟是Xy還是Xz的實例并不重要,因為它們有相同的方法,只不過這些方法的內(nèi)部實現(xiàn)不同罷了。 public static void main(String args) PersonFactory pf = new PersonFacto
8、ry(); Person p = null; p = pf.getPerson(Chinese); System.out.println(p.sayGoodBye(jack); System.out.println(p.sayHello(jack);4.2.2 工廠模式知識補充ApplicationContext context = new FileSystemXmlApplicationContext(src/org/test/applicationContext.xml); Person p = (Chese)context.getBean(chese); System.out.print
9、ln(p.sayGoodBye(rose); System.out.println(p.sayHello(rose); 4.3 Spring 框架組成Spring框架組成控制反轉(zhuǎn)IoC (依賴注入DI)面向方面(AOP) 4.3 Spring 框架組成Spring是一個分層框架,由若干定義好的模塊組成如下圖所示。 Spring2.0所有模塊定義在核心容器之上,核心容器定義了創(chuàng)建、配置和管理bean的方式。Spring2.5的模塊Spring2.5內(nèi)核(IoC容器)AOP技術(shù)實現(xiàn)Spring AOPAspectJ5 無縫集成DAOSpring JDBC集成事務(wù)管理ORMHibernate JPA
10、TopLinkiBATSJava EE 服務(wù)及技術(shù)JMXJMSEJB3.0組件技術(shù)郵件服務(wù)遠(yuǎn)程服務(wù)腳本技術(shù)集成線程池、任務(wù)調(diào)度支持WebSpring Web MVCWeb框架集StrutsWebworkTypestryJSF富視圖支持VelocityFreeMakerPDFJsper ReportsExcelSpring Portlet MVC 4.3 Spring 框架在IoC容器、 AOP技術(shù)實現(xiàn)的基礎(chǔ)上,存在各式各樣的DAO層集成技術(shù)、Java EE服務(wù)及技術(shù)、Web層支持。4.3.1 Spring 控制反轉(zhuǎn)(IoC)控制反轉(zhuǎn)IoC (Inversion of Control)是Spri
11、ng中最核心最重要的概念。借助于IoC ,實現(xiàn)“面向接口編程,而不是面向?qū)崿F(xiàn)編程”。4.3.1 Spring 控制反轉(zhuǎn)(IoC)IoC模式,即由容器控制程序之間的依賴關(guān)系,而不是由程序代碼直接控制,控制權(quán)的轉(zhuǎn)移就是反轉(zhuǎn)。依賴關(guān)系 意指類之間的訪問關(guān)系。 如果類A訪問類B的屬性或方法,或者類A實例化類B,則稱類A依賴于類B。4.3.1 Spring 控制反轉(zhuǎn)(IoC)IoC設(shè)計模式將創(chuàng)建對象實例的任務(wù)交給IoC容器,應(yīng)用代碼只需直接使用實例。實現(xiàn)了IoC模式的框架叫IoC容器。 IoC的另一個名字叫依賴注入(dependency Injection)- 組件之間的依賴關(guān)系由容器在運行時決定,形象
12、地講,就是由容器動態(tài)地將某種依賴關(guān)系注入到組件中。4.3.1 Spring 控制反轉(zhuǎn)(IoC)依賴注入(Dependency Injection)和控制反轉(zhuǎn)(Inversion of Control)是同一個概念。具體含義是:當(dāng)某個對象(可能是一個Java實例,調(diào)用者)需要另一個對象(另一個Java實例,被調(diào)用者)的協(xié)助時,在傳統(tǒng)的程序設(shè)計過程中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實例。但在Spring里,創(chuàng)建被調(diào)用者的工作不再由調(diào)用者來完成,因此稱為控制反轉(zhuǎn);創(chuàng)建被調(diào)用者實例的工作通常由Spring容器來完成,然后注入調(diào)用者,因此也稱為依賴注入。4.3.1 Spring 控制反轉(zhuǎn)(IoC)IOC特
13、點4.3.1 Spring 控制反轉(zhuǎn)(IoC)IoC的優(yōu)點:不必關(guān)心組件的創(chuàng)建不必管理組件的生命周期 組件容易共享 測試非常容易4.3.1 Spring 控制反轉(zhuǎn)(IoC)Spring提供的兩個IoC容器(BeanFactory和ApplicationContext)(見工廠模式知識補充)BeanFactory主要適用于環(huán)境、內(nèi)容受限的場合,如在Applet環(huán)境中, BeanFactory是最基礎(chǔ)的IoC容器,它提供了配置框架和基礎(chǔ)功能。ApplicationContext繼承于BeanFactory,更適合于企業(yè)級的應(yīng)用開發(fā),重點討論。4.3.1 Spring 控制反轉(zhuǎn)(IoC)BeanFa
14、ctory 可將IoC容器比做食品加工廠。在提供源材料(POJO類)后,經(jīng)過加工工藝和設(shè)備(Spring IoC和Spring AOP)處理后,顧客得到滿意的食品(受管POJO,可能裝備了事務(wù)、安全等功能)。4.3.1 Spring 控制反轉(zhuǎn)(IoC)IoC原理默認(rèn)時,配置的POJO都是單例的,即整個IoC容器僅有一個對應(yīng)的POJO實例,而不是每次調(diào)用時產(chǎn)生一個實例(原型的)。在初始化BeanFactory實例factory后,IoC容器并不預(yù)先實例化在配置文件中聲明的POJO實例。只是在應(yīng)用程序調(diào)用對應(yīng)的POJO時,Spring 才會實例化用到的受管POJO。4.3.1 Spring 控制反
15、轉(zhuǎn)(IoC)IoC原理Spring支持三種主流的IoC注入類型設(shè)值( setter)注入、購造器注入和方法注入。設(shè)值注入 指通過調(diào)用無參構(gòu)造器實例化受管POJO后,調(diào)用 setter方法設(shè)置對象間的依賴關(guān)系。構(gòu)造器注入 往構(gòu)造器傳入若干參數(shù)完成依賴注入,傳入的參數(shù)都是受管POJO依賴的對象。4.3.1 Spring 控制反轉(zhuǎn)(IoC)ApplicationContext IoC容器 建立在BeanFactory基礎(chǔ)之上,對企業(yè)級應(yīng)用開發(fā)提供了更多支持,增加了國際化消息(i18n)支持、事件傳送(發(fā)送和消費事件)支持、訪問低層資源(.URL和java.io.File)、IoC容器分層(面向架構(gòu)分
16、層)等。4.3.1 Spring 控制反轉(zhuǎn)(IoC)ApplicationContext Spring IoC為ApplicationContext提供了許多實現(xiàn)類,ClassPathXmlApplicationContext和 FileSystemXmlApplicationContext使用最為頻繁。4.3.1 Spring 控制反轉(zhuǎn)(IoC)IoC在web應(yīng)用中的原理 在web應(yīng)用中,Spring會使用ApplicationContext的XmlApplicationContext來完成容器的創(chuàng)建工作。與BeanFactory不同的是:在構(gòu)建ApplicationContext( IoC
17、 容器)過程中, Spring會自動實例化XML中定義的各個單例。4.3.1 Spring 控制反轉(zhuǎn)(IoC)加載IoC容器到Web應(yīng)用中IoC容器也是對象,需要實例化、提供方式使DI與應(yīng)用程序能交互、不使用時銷毀它。Spring提供contextLoaderListener和ContextLoaderservlet輔助類解決以上問題。對于支持Servletcontextlistener的web容器,開發(fā)者只需在web.xml中配置上下文參數(shù)即可。4.3.1 Spring 控制反轉(zhuǎn)(IoC)Spring 的web.xml配置 Spring的MVC框架是一個請求驅(qū)動的Web框架,其設(shè)計圍繞一個中
18、心的Servlet進行,它能將請求分發(fā)給控制器,并提供其他功能幫助Web應(yīng)用開發(fā)。 基于Struts+Spring+Hibernate的聯(lián)合應(yīng)用中,接收請求的Servlet是由Struts的ActionServlet來配置的,因此不使用DispatcherServlet來接收請求了。而是在web.xml中配置一個監(jiān)聽器,并通過加載Spring配置。如下所示: contextconfigLocation /WEB-INF/applicationContextcon.xml 注意:contextConfigLocation參數(shù)名稱是系統(tǒng)默認(rèn)解析的參數(shù),不能換成任意別的名稱,否則系統(tǒng)將加載默認(rèn)路徑/
19、WEB-INF/applicationContext.xml文件,如果找不到,就會報錯。4.3.1 Spring 控制反轉(zhuǎn)(IoC) org.springframework.web.context.ContextLoaderListener 4.3.1 Spring 控制反轉(zhuǎn)(IoC)一個例子:一個人需要一把斧子.模型: 調(diào)用者: 人被調(diào)用者:斧子4.3.1 依賴注入例子三種方式實現(xiàn):一 原始社會:調(diào)用者自己創(chuàng)建被調(diào)用者二 工業(yè)社會:調(diào)用者向工廠要被調(diào)用者三 服務(wù)型社會:被調(diào)用者主動送上門4.3.1 依賴注入例子4.3.1 依賴注入例子兩種方法注入 構(gòu)造方法注入 設(shè)置屬性注入4.3.1 依賴注
20、入例子設(shè)值注入:指通過setter方法傳入被調(diào)用者的實例。public class Chinese implements Person private Axe axe; public Axe getAxe() return axe; public void setAxe(Axe axe) this.axe = axe; public void useAxe() axe.chop(); 設(shè)置注入 4.3.1 依賴注入例子4.3.1 依賴注入例子構(gòu)造注入:指通過構(gòu)造函數(shù)來完成依賴關(guān)系的設(shè)定,而不是通過setter方法。public class American implements Person
21、private Axe axe; public American(Axe axe) this.axe = axe; public void useAxe() axe.chop(); 構(gòu)造注入 4.3.1 依賴注入例子4.3.1 依賴注入例子兩種注入方式比較: 設(shè)值注入優(yōu)點:設(shè)值注入與傳統(tǒng)的JavaBean的寫法更相似,所以更直觀,自然。對于復(fù)雜的依賴關(guān)系,采用構(gòu)造注入,會導(dǎo)致構(gòu)造器過于臃腫,難以閱讀在某些屬性可選的情況下,多參數(shù)的構(gòu)造器更加笨重4.3.1 依賴注入例子兩種注入方式比較: 構(gòu)造注入優(yōu)點: 可以在構(gòu)造器中決定依賴關(guān)系的注入順序?qū)τ谝蕾囮P(guān)系無需變化的bean,構(gòu)造注入更有用處依賴關(guān)系
22、只能在構(gòu)造器中設(shè)定,組件內(nèi)部的依賴關(guān)系完全透明,更符合高內(nèi)聚的原則4.3.2面向方面編程(AOP)主要內(nèi)容AOP概述AOP的基本概念Spring中的AOP4.3.2.1 AOP概述OOP(Object-Oriented Programming,又稱面向?qū)ο缶幊蹋?。OOP更多的關(guān)注系統(tǒng)的垂直切面關(guān)注的問題,而對系統(tǒng)的橫切面比如:日志、安全性、事務(wù)管理等關(guān)注很少,或者說很難關(guān)注。AOP : 面向切面編程(Aspect-Oriented Programming),是OOP的延續(xù)。AOP 將分布在各個類中具有相同功能的代碼片段整合到一起,由單獨的功能模塊完成,不僅減少了代碼的重復(fù)量,降低了耦合,也提高
23、了代碼的可維護性。 不要認(rèn)為AOP會取代OOP,它只是OOP的補充。4.3.2.1 AOP概述AOP的作用就是在可以順序執(zhí)行的程序中,插入某些特殊的邏輯來實現(xiàn)一些特殊的功能 ,例如日志、事務(wù)、安全等都可以很方便的使用AOP來實現(xiàn)。采用AOP之前采用AOP之后4.3.2.1 AOP概述關(guān)注點分類 使用“橫切”技術(shù),AOP把軟件系統(tǒng)分為兩個部分: 核心關(guān)注點主要關(guān)注系統(tǒng)的業(yè)務(wù)邏輯;橫切關(guān)注點主要關(guān)注系統(tǒng)級的服務(wù),供業(yè)務(wù)邏輯使用。關(guān)注點核心關(guān)注點橫切關(guān)注點4.3.2.1 AOP概述現(xiàn)實狀態(tài)業(yè)務(wù)邏輯中,到處都涉及橫切關(guān)注點。因此對各個已經(jīng)實現(xiàn)的模塊(業(yè)務(wù)邏輯)而言,都有大量的橫切關(guān)注點實現(xiàn)。新的方案業(yè)
24、務(wù)邏輯用OO技術(shù)實現(xiàn);橫切關(guān)注點用AOP技術(shù)實現(xiàn)。橫切關(guān)注點是系統(tǒng)級服務(wù),對大部分應(yīng)用是常見的,容易抽象出來,并加以實現(xiàn)。4.3.2.1 AOP概述實現(xiàn)AOP的總體模式OO技術(shù)將應(yīng)用中的核心關(guān)注點分解成由層次(繼承)結(jié)構(gòu)組成的領(lǐng)域?qū)ο蠹?。AOP將應(yīng)用中的橫切關(guān)注點分解成由切面(Aspect)組成的生態(tài)子系統(tǒng)。它們被分別實現(xiàn),互為補充,使得應(yīng)用的開發(fā)變得簡單、可維護性得到增強。4.3.2.2 AOP的基本概念各種AOP實現(xiàn)切面的技術(shù)、框架、機制、手段可能不同,但是AOP技術(shù)的基本概念是相同的。包括以下個術(shù)語連接點(join point)、切入點(cutpoint)、 裝備(advice)、引入
25、(introduction)、 目標(biāo)對象(target object)、織入(weaving) 切面(Aspect)。4.3.2.2 AOP的基本概念連接點(Joinpoint)連接點是程序執(zhí)行中的一個精確執(zhí)行點,如執(zhí)行到某個方法、訪問到某個成員變量、拋出某異常、裝載某個類。通常用連接點的強弱來衡量AOP實現(xiàn)的強弱。實現(xiàn)連接點的方法有很多,Spring AOP僅支持方法級連接點。也就是說,只有在方法執(zhí)行時才能加AOP。它是一個抽象的概念,在實現(xiàn)AOP時,并不需要去定義一個join point。4.3.2.2 AOP的基本概念切入點(point cut)通過切入點能夠聲明、集結(jié)連接點。在AOP中
26、,可以定義一個point cut,來捕獲相關(guān)方法的調(diào)用。通常裝備與切入點關(guān)聯(lián)在一起,一旦某連接點被觸發(fā),則會立即執(zhí)行相應(yīng)的裝備。開發(fā)者借助于point cut表達語言來完成point cut的指定工作。4.3.2.2 AOP的基本概念裝備(Advice)裝備指切面(aspect)在特定連接點所采取的動作。特定連接點由切入點(point cut)指定。主要的裝備類型包括:Before、 AfterReturning、AfterThrowing、 After 、Around。 Before裝備能夠在特定連接點被觸發(fā)前執(zhí)行,其它類似。4.3.2.2 AOP的基本概念引入(introducion)引入
27、也稱為inter-type聲明(AspectJ6)。將新的接口、方法、成員變量動態(tài)引入到目標(biāo)類、接口或切面中。不改變一個現(xiàn)有類代碼的情況下,為該類添加屬性和方法簡單講為對象引入附加的方法或?qū)傩?,從而達到修改對象結(jié)構(gòu)的目的。有的AOP工具又將其稱為mixin。目標(biāo)對象(target Object)被若干切面(aspect)裝配過的對象,也被稱為被裝備的對象。4.3.2.2 AOP的基本概念織入(weaving)將切面與目標(biāo)對象組裝在一起的過程稱為織入。通過織入創(chuàng)建一個被裝備的對象??椚霑r機有編譯期、裝載期、運行期。不同的AOP實現(xiàn)支持不同織入時機。Sring AOP 支持運行期織入。把切面加入程序代碼的過程。4.3.2.2 AOP的基本概念切面(aspect)與OOP中對象的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京2025年中國電影博物館第一次公開招聘筆試歷年參考題庫附帶答案詳解
- 勞務(wù)派遣協(xié)議合同范例-@-2
- 屋頂租賃合同范例
- 項目融資協(xié)議合同范例二零二五年
- 二零二五版房屋中介居間合同
- 委托代開發(fā)票協(xié)議書二零二五年
- 小學(xué)生防溺水微課課件
- 大學(xué)生創(chuàng)新創(chuàng)業(yè)核心團隊
- 2025年云南省勞動合同樣本下載
- 2025年北京市房屋租賃合同范文
- 企業(yè)模擬經(jīng)營電子沙盤
- 專升本思政復(fù)習(xí)指導(dǎo)試題及答案
- 2025年涂料銷售合同模板
- 2024年昆明渝潤水務(wù)有限公司招聘考試真題
- 2025-2030中國小武器和輕武器行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025年部編版新教材語文一年級下冊第一、第二次月考試題帶答案(各一套)
- 8.1薪火相傳的傳統(tǒng)美德 教學(xué)設(shè)計-2024-2025學(xué)年統(tǒng)編版道德與法治七年級下冊
- 用紙箱做鳥窩課件
- 巡視巡察課件2025
- 2025江蘇南京市金陵飯店股份限公司招聘高頻重點模擬試卷提升(共500題附帶答案詳解)
- 2025年中考物理知識點歸納
評論
0/150
提交評論