Spring業務邏輯層技術課件_第1頁
Spring業務邏輯層技術課件_第2頁
Spring業務邏輯層技術課件_第3頁
Spring業務邏輯層技術課件_第4頁
Spring業務邏輯層技術課件_第5頁
已閱讀5頁,還剩131頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第四章Spring2.0業務邏輯層技術第四章Spring2.0業務邏輯層技術1教學內容Spring簡介

有關知識補充Spring框架Spring配置文件教學內容Spring簡介4.1Spring簡介——概述Spring是一個開源框架,是為了解決企業應用開發的復雜性而創建的。目的:解決企業應用開發的復雜性。功能:使用基本的JavaBean代替EJB,并提供了更多的企業應用功能。范圍:任何Java應用。簡單來說,Spring是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架。

4.1Spring簡介——概述Spring是一個開源框架,4.1Spring簡介——概述輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發布。并且Spring所需的處理開銷也是微不足道的。非侵入

——在應用中,一般不需要引用springjar包里的類。控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了松耦合。當應用了IoC,某一接口的具體實現類的選擇控制權從調用類中移除,轉交給第三方裁決。面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務()管理)進行內聚性的開發。應用對象只實現它們應該做的——完成業務邏輯——僅此而已。它們并不負責其它的系統級關注點,例如日志或事務支持。

4.1Spring簡介——概述輕量——從大小與開銷兩方面而4.1Spring簡介——容器Spring即是一個容器又是一個框架。容器——Spring包含并管理應用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創建——基于一個可配置原型(prototype),bean可以創建一個單獨的實例或者每次需要時都生成一個新的實例——以及它們是如何相互關聯的。框架——Spring提供了很多基礎的與業務邏輯無關的功能,比如:事務管理、持久化框架集成等等,使用Spring框架,開發人員可以專注于業務邏輯開發,這個意義上講它是一個框架。4.1Spring簡介——容器Spring即是一個容器又是4.1Spring簡介——容器借助于Spring,各種JavaEE技術和服務的使用得到了大大簡化,因為POJO(普通Java對象,與編程模式無關)編程模型被Spring引入到JavaEE的應用開發中。為了使POJO編程模型在Spring框架中可用,Spring引入了SpringDI容器和SpringAOP實現技術,它們在倡導POJO編程模型方面的功勞是最大的。4.1Spring簡介——容器借助于Spring,各種Ja4.1Spring簡介——容器Spring提供的控制反轉(DI)容器能夠管理POJO及各種Java組件。DI負責POJO的管理,比如為它提供事務服務、生命周期服務、線程服務、緩存服務和安全性服務等。與此同時,AOP技術使得應用程序能夠透明地享受到JavaEE容器提供的企業級的服務(如JMX、JCACCI和JMS)。SpringDI容器針對各種DAO層集成技術(如Hibernate、JPA和JDBC)、JavaEE服務及技術提供了一流的集成支持。

4.1Spring簡介——容器Spring提供的控制反轉4.1Spring簡介——框架Spring框架是連接Struts與Hibernate的橋梁,同時它很好地處理了業務邏輯。

Spring框架提供的控制反轉和面向方面編程、插件式架構降低了應用程序之間的依賴性。借助于XML定義文件,開發者能夠在程序運行時連接不同的組件。4.1Spring簡介——框架Spring框架是連接StSpring基本概念IoC=InverseofControlDI=DependenceInjectionAOP面向接口面向抽象核心容器核心容器提供Spring框架的基本功能。核心容器的主要組件是BeanFactory(ApplicationContext).BeanFactory使用控制反轉(IoC)模式將應用程序的配置和依賴性規范與實際的應用程序代碼分開4.1Spring簡介——概念Spring基本概念4.1Spring簡介——概念4.2.1POJO類補充POJO,簡單的Java對象(PlainOrdinaryJavaObjects)實際就是普通JavaBeans,使用POJO名稱是為了避免和EJB混淆起來,而且簡稱比較直接.其中有一些屬性及其gettersetter方法的類。EntityBean(實體Bean)是持久數據組件,代表存儲在外部介質中的持久(Persistence)對象或者已有的企業應用系統資源。簡單地講,一個EntityBean可以代表數據庫中的一行記錄,多個客戶端應用能夠以共享方式訪問表示該數據庫記錄的EntityBean。

4.2.1POJO類補充POJO,簡單的Java對象(Pl4.2.2工廠模式知識補充在面向對象的編程中,工廠模式是一種經常被使用到的模式。工廠模式就是專門負責將大量有共同接口的類實例化,而且不必事先知道每次是要實例化哪一個類的模式。4.2.2工廠模式知識補充在面向對象的編程中,工廠模式是一4.2.2工廠模式知識補充X-----PersonXy---ChineseXz---American工廠類---PersonFactory4.2.2工廠模式知識補充X-----Person4.2.2工廠模式知識補充返回的究竟是Xy還是Xz的實例并不重要,因為它們有相同的方法,只不過這些方法的內部實現不同罷了。public

static

voidmain(String[]args){PersonFactorypf=newPersonFactory();Personp=null;p=pf.getPerson("Chinese");System.out.println(p.sayGoodBye("jack"));System.out.println(p.sayHello("jack"));}4.2.2工廠模式知識補充返回的究竟是Xy還是Xz的實例并4.2.2工廠模式知識補充ApplicationContextcontext=newFileSystemXmlApplicationContext("src/org/test/applicationContext.xml");Personp=(Chese)context.getBean("chese");System.out.println(p.sayGoodBye("rose"));System.out.println(p.sayHello("rose"));4.2.2工廠模式知識補充ApplicationConte

4.3Spring框架組成Spring框架組成控制反轉IoC(依賴注入DI)面向方面(AOP)4.3Spring框架組成Spring框架組成

4.3Spring框架組成Spring是一個分層框架,由若干定義好的模塊組成如下圖所示。Spring2.0所有模塊定義在核心容器之上,核心容器定義了創建、配置和管理bean的方式。4.3Spring框架組成Spring是一個分層框架Spring2.5的模塊Spring2.5內核(IoC容器)AOP技術實現SpringAOPAspectJ5無縫集成DAOSpringJDBC集成事務管理ORMHibernateJPATopLinkiBATSJavaEE服務及技術JMXJMSEJB3.0組件技術郵件服務遠程服務腳本技術集成線程池、任務調度支持WebSpringWebMVCWeb框架集StrutsWebworkTypestryJSF富視圖支持VelocityFreeMakerPDFJsperReportsExcelSpringPortletMVCSpring2.5的模塊Spring2.5內核(IoC容器)

4.3Spring框架在IoC容器、AOP技術實現的基礎上,存在各式各樣的DAO層集成技術、JavaEE服務及技術、Web層支持。4.3Spring框架在IoC容器、AOP技術實現4.3.1

Spring控制反轉(IoC)控制反轉IoC(InversionofControl)是Spring中最核心最重要的概念。借助于IoC,實現“面向接口編程,而不是面向實現編程”。4.3.1Spring控制反轉(IoC)控制反轉IoC4.3.1Spring控制反轉(IoC)IoC模式,即由容器控制程序之間的依賴關系,而不是由程序代碼直接控制,控制權的轉移就是反轉。依賴關系意指類之間的訪問關系。如果類A訪問類B的屬性或方法,或者類A實例化類B,則稱類A依賴于類B。4.3.1Spring控制反轉(IoC)IoC模式,即由4.3.1Spring控制反轉(IoC)IoC設計模式將創建對象實例的任務交給IoC容器,應用代碼只需直接使用實例。實現了IoC模式的框架叫IoC容器。IoC的另一個名字叫依賴注入(dependencyInjection)-組件之間的依賴關系由容器在運行時決定,形象地講,就是由容器動態地將某種依賴關系注入到組件中。4.3.1Spring控制反轉(IoC)IoC設計模式將4.3.1Spring控制反轉(IoC)依賴注入(DependencyInjection)和控制反轉(InversionofControl)是同一個概念。具體含義是:當某個對象(可能是一個Java實例,調用者)需要另一個對象(另一個Java實例,被調用者)的協助時,在傳統的程序設計過程中,通常由調用者來創建被調用者的實例。但在Spring里,創建被調用者的工作不再由調用者來完成,因此稱為控制反轉;創建被調用者實例的工作通常由Spring容器來完成,然后注入調用者,因此也稱為依賴注入。4.3.1Spring控制反轉(IoC)依賴注入(Dep4.3.1Spring控制反轉(IoC)IOC特點4.3.1Spring控制反轉(IoC)IOC特點4.3.1Spring控制反轉(IoC)IoC的優點:不必關心組件的創建不必管理組件的生命周期

組件容易共享

測試非常容易4.3.1Spring控制反轉(IoC)IoC的優點:4.3.1Spring控制反轉(IoC)Spring提供的兩個IoC容器(BeanFactory和ApplicationContext)(見工廠模式知識補充)BeanFactory主要適用于環境、內容受限的場合,如在Applet環境中,BeanFactory是最基礎的IoC容器,它提供了配置框架和基礎功能。ApplicationContext繼承于BeanFactory,更適合于企業級的應用開發,重點討論。4.3.1Spring控制反轉(IoC)Spring提供4.3.1Spring控制反轉(IoC)BeanFactory可將IoC容器比做食品加工廠。在提供源材料(POJO類)后,經過加工工藝和設備(SpringIoC和SpringAOP)處理后,顧客得到滿意的食品(受管POJO,可能裝備了事務、安全等功能)。4.3.1Spring控制反轉(IoC)BeanFact4.3.1Spring控制反轉(IoC)IoC原理默認時,配置的POJO都是單例的,即整個IoC容器僅有一個對應的POJO實例,而不是每次調用時產生一個實例(原型的)。在初始化BeanFactory實例factory后,IoC容器并不預先實例化在配置文件中聲明的POJO實例。只是在應用程序調用對應的POJO時,Spring才會實例化用到的受管POJO。4.3.1Spring控制反轉(IoC)IoC原理4.3.1Spring控制反轉(IoC)IoC原理Spring支持三種主流的IoC注入類型設值(setter)注入、購造器注入和方法注入。設值注入指通過調用無參構造器實例化受管POJO后,調用setter方法設置對象間的依賴關系。構造器注入往構造器傳入若干參數完成依賴注入,傳入的參數都是受管POJO依賴的對象。4.3.1Spring控制反轉(IoC)IoC原理4.3.1Spring控制反轉(IoC)ApplicationContextIoC容器建立在BeanFactory基礎之上,對企業級應用開發提供了更多支持,增加了國際化消息(i18n)支持、事件傳送(發送和消費事件)支持、訪問低層資源(.URL和java.io.File)、IoC容器分層(面向架構分層)等。4.3.1Spring控制反轉(IoC)Applicat4.3.1Spring控制反轉(IoC)ApplicationContext

SpringIoC為ApplicationContext提供了許多實現類,ClassPathXmlApplicationContext和

FileSystemXmlApplicationContext使用最為頻繁。4.3.1Spring控制反轉(IoC)Applicat4.3.1Spring控制反轉(IoC)IoC在web應用中的原理在web應用中,Spring會使用ApplicationContext的XmlApplicationContext來完成容器的創建工作。與BeanFactory不同的是:在構建ApplicationContext(IoC容器)過程中,Spring會自動實例化XML中定義的各個單例。4.3.1Spring控制反轉(IoC)IoC在web應4.3.1Spring控制反轉(IoC)加載IoC容器到Web應用中IoC容器也是對象,需要實例化、提供方式使DI與應用程序能交互、不使用時銷毀它。Spring提供contextLoaderListener和ContextLoaderservlet輔助類解決以上問題。對于支持Servletcontextlistener的web容器,開發者只需在web.xml中配置上下文參數即可。4.3.1Spring控制反轉(IoC)加載IoC容器到4.3.1Spring控制反轉(IoC)Spring的web.xml配置Spring的MVC框架是一個請求驅動的Web框架,其設計圍繞一個中心的Servlet進行,它能將請求分發給控制器,并提供其他功能幫助Web應用開發。基于Struts+Spring+Hibernate的聯合應用中,接收請求的Servlet是由Struts的ActionServlet來配置的,因此不使用DispatcherServlet來接收請求了。而是在web.xml中配置一個監聽器,并通過<context-param>加載Spring配置。如下所示:

4.3.1Spring控制反轉(IoC)Spring的<!--

contextConfigLocation參數定義了web工程要加載的spring配置文件

--><context-param><param-name>contextconfigLocation</param-name><param-value>

/WEB-INF/applicationContextcon.xml</param-value></context-param>注意:contextConfigLocation參數名稱是系統默認解析的參數,不能換成任意別的名稱,否則系統將加載默認路徑/WEB-INF/applicationContext.xml文件,如果找不到,就會報錯。4.3.1Spring控制反轉(IoC)<!--

contextConfigLocation參數定義<!--

注冊spring監聽器--><listener><listener-class>

org.springframework.web.context.ContextLoaderListener</listener-class></listener>4.3.1Spring控制反轉(IoC)<!--

注冊spring監聽器-->4.3.1Spri一個例子:一個人需要一把斧子.模型:調用者:人被調用者:斧子4.3.1依賴注入——例子一個例子:4.3.1依賴注入——例子三種方式實現:一原始社會:調用者自己創建被調用者二工業社會:調用者向工廠要被調用者三服務型社會:被調用者主動送上門4.3.1依賴注入——例子三種方式實現:4.3.1依賴注入——例子4.3.1依賴注入——例子兩種方法注入

構造方法注入

設置屬性注入4.3.1依賴注入——例子兩種方法注入4.3.1依賴注入——例子設值注入:指通過setter方法傳入被調用者的實例。public

classChineseimplementsPerson{

privateAxeaxe;publicAxegetAxe(){returnaxe;}public

voidsetAxe(Axeaxe){this.axe=axe;}public

voiduseAxe(){axe.chop();}}4.3.1依賴注入——例子設值注入:指通過setter方法設置注入<beanid="chinese"class="org.spring.Chinese"abstract="false“singleton="true"lazy-init="default"autowire="default“dependency-check="default"><propertyname="axe"><refbean="stoneAxe"/></property></bean>4.3.1依賴注入——例子設置注入4.3.1依賴注入——例子4.3.1依賴注入——例子構造注入:指通過構造函數來完成依賴關系的設定,而不是通過setter方法。public

classAmericanimplementsPerson{

privateAxeaxe;

publicAmerican(Axeaxe){

this.axe=axe;}public

voiduseAxe(){axe.chop();}}4.3.1依賴注入——例子構造注入:指通過構造函數來完成依構造注入<beanid="american"class="org.spring.American"abstract="false“singleton="true"lazy-init="default"autowire="default“dependency-check="default"><constructor-arg><refbean="steelAxe"/></constructor-arg></bean>4.3.1依賴注入——例子構造注入4.3.1依賴注入——例子4.3.1依賴注入——例子兩種注入方式比較:設值注入優點:設值注入與傳統的JavaBean的寫法更相似,所以更直觀,自然。對于復雜的依賴關系,采用構造注入,會導致構造器過于臃腫,難以閱讀在某些屬性可選的情況下,多參數的構造器更加笨重4.3.1依賴注入——例子兩種注入方式比較:4.3.1依賴注入——例子兩種注入方式比較:構造注入優點:可以在構造器中決定依賴關系的注入順序對于依賴關系無需變化的bean,構造注入更有用處依賴關系只能在構造器中設定,組件內部的依賴關系完全透明,更符合高內聚的原則4.3.1依賴注入——例子兩種注入方式比較:4.3.2面向方面編程(AOP)主要內容AOP概述AOP的基本概念Spring中的AOP4.3.2面向方面編程(AOP)主要內容4.3.2.1AOP概述OOP(Object-OrientedProgramming,又稱面向對象編程)。OOP更多的關注系統的垂直切面關注的問題,而對系統的橫切面比如:日志、安全性、事務管理等關注很少,或者說很難關注。AOP:面向切面編程(Aspect-OrientedProgramming),是OOP的延續。AOP將分布在各個類中具有相同功能的代碼片段整合到一起,由單獨的功能模塊完成,不僅減少了代碼的重復量,降低了耦合,也提高了代碼的可維護性。

不要認為AOP會取代OOP,它只是OOP的補充。AOP概述OOP(Object-Orien4.3.2.1AOP概述AOP的作用就是在可以順序執行的程序中,插入某些特殊的邏輯來實現一些特殊的功能,例如日志、事務、安全等都可以很方便的使用AOP來實現。采用AOP之前采用AOP之后AOP概述AOP的作用就是在可以順序執行的4.3.2.1AOP概述關注點分類

使用“橫切”技術,AOP把軟件系統分為兩個部分:

核心關注點主要關注系統的業務邏輯;橫切關注點主要關注系統級的服務,供業務邏輯使用。關注點核心關注點橫切關注點AOP概述關注點分類關注點核心關注點橫切關注4.3.2.1AOP概述現實狀態業務邏輯中,到處都涉及橫切關注點。因此對各個已經實現的模塊(業務邏輯)而言,都有大量的橫切關注點實現。新的方案業務邏輯用OO技術實現;橫切關注點用AOP技術實現。橫切關注點是系統級服務,對大部分應用是常見的,容易抽象出來,并加以實現。AOP概述現實狀態4.3.2.1AOP概述實現AOP的總體模式OO技術將應用中的核心關注點分解成由層次(繼承)結構組成的領域對象集合。AOP將應用中的橫切關注點分解成由切面(Aspect)組成的生態子系統。它們被分別實現,互為補充,使得應用的開發變得簡單、可維護性得到增強。AOP概述實現AOP的總體模式4.3.2.2

AOP的基本概念各種AOP實現切面的技術、框架、機制、手段可能不同,但是AOP技術的基本概念是相同的。包括以下7個術語連接點(joinpoint)、切入點(cutpoint)、

裝備(advice)、引入(introduction)、

目標對象(targetobject)、織入(weaving)

切面(Aspect)。AOP的基本概念各種AOP實現切面的技術、框4.3.2.2

AOP的基本概念連接點(Joinpoint)連接點是程序執行中的一個精確執行點,如執行到某個方法、訪問到某個成員變量、拋出某異常、裝載某個類。通常用連接點的強弱來衡量AOP實現的強弱。實現連接點的方法有很多,SpringAOP僅支持方法級連接點。也就是說,只有在方法執行時才能加AOP。它是一個抽象的概念,在實現AOP時,并不需要去定義一個joinpoint。AOP的基本概念連接點(Joinpoint)4.3.2.2

AOP的基本概念切入點(pointcut)通過切入點能夠聲明、集結連接點。在AOP中,可以定義一個pointcut,來捕獲相關方法的調用。通常裝備與切入點關聯在一起,一旦某連接點被觸發,則會立即執行相應的裝備。開發者借助于pointcut表達語言來完成pointcut的指定工作。AOP的基本概念切入點(pointcut)4.3.2.2

AOP的基本概念裝備(Advice)裝備指切面(aspect)在特定連接點所采取的動作。特定連接點由切入點(pointcut)指定。主要的裝備類型包括:Before、AfterReturning、AfterThrowing、After、Around。

Before裝備能夠在特定連接點被觸發前執行,其它類似。AOP的基本概念裝備(Advice)4.3.2.2

AOP的基本概念引入(introducion)引入也稱為inter-type聲明(AspectJ6)。將新的接口、方法、成員變量動態引入到目標類、接口或切面中。不改變一個現有類代碼的情況下,為該類添加屬性和方法簡單講為對象引入附加的方法或屬性,從而達到修改對象結構的目的。有的AOP工具又將其稱為mixin。目標對象(targetObject)被若干切面(aspect)裝配過的對象,也被稱為被裝備的對象。AOP的基本概念引入(introducion4.3.2.2

AOP的基本概念織入(weaving)將切面與目標對象組裝在一起的過程稱為織入。通過織入創建一個被裝備的對象。織入時機有編譯期、裝載期、運行期。不同的AOP實現支持不同織入時機。SringAOP支持運行期織入。把切面加入程序代碼的過程。AOP的基本概念織入(weaving)4.3.2.2

AOP的基本概念切面(aspect)與OOP中對象的概念一樣,是AOP中的核心概念。方面將pointcut、裝備、引入、目標對象等信息集結在一起,從而定義相應的織入規則,這樣一個整體稱為切面(aspect)。AOP的基本概念切面(aspect)4.3.3SpringAOP的基本概念實現AOP的技術,主要分為兩大類1.采用動態代理技術,利用截取消息的方式,對該消息進行裝飾,以取代原有對象行為的執行;2.采用靜態織入的方式,引入特定的語法創建“方面”,從而使得編譯器可以在編譯期間織入有關“方面”的代碼。4.3.3SpringAOP的基本概念實現AOP的技術,4.3.3

SpringAOP概述

AOP允許開發者動態地修改OOP定義的靜態模型,即不用修改原來的OO模型,甚至可以不修改OO代碼本身,即可完成對橫切面問題的解決。比如,將系統中處理日志、安全性、事務及其他企業級服務集中放置在一個地方。因此AOP使得OOP中的重復代碼能夠大范圍減少。4.3.3SpringAOP概述4.3.3

SpringAOPSpingAOP基于IoC,是對OOP的有益補充.SpingAOP將應用系統分為兩部分,核心業務邏輯及橫向的通用邏輯,即方面(Aspect)。比如大型應用中涉及的持久化管理、事務管理、安全管理、日志管理和調試管理。使用AOP可以將處理Aspect的代碼注入主程序,AOP可以防止代碼混亂。4.3.3SpringAOPSpingAOP基于I基于XML的AOP配置

在Spring配置文件里,所有的切面和通知器都要配置在<aop:config>標簽里,一個applicationContext可以包含多個<aop:config>,一個<aop:config>可以包含pointcut、advisor、aspect元素(注意必須是這個順序)。4.3.3

SpringAOP基于XML的AOP配置

4.3.3SpringAOP

1.聲明一個切面

<aop:config>

<aop:aspectid="myAspect"ref="myBean">

。。。。。

</aop:aspect>

</aop:config>

<beanid="myBean"class="">

。。。。。

</Bean>

說明:切面用<aop:aspect>來聲明。4.3.3

SpringAOP

1.聲明一個切面4.3.3SpringAOP2.聲明一個切入點

<aop:config>

<aop:pointcutid="myPointcut"expression="excution(*com.service.*.*(..))"/>

<aop:advisorspointcut-ref="myService"advice-ref="tx-advice"/>

</aop:config>4.3.3

SpringAOP2.聲明一個切入點4.3.3SpringAOP

3.聲明一個通知<txt:adviceid="tx-advice">

<tx:attributes>

<tx:methodname="inser*"propagation="REQUIRED"rollback-for="Exception"/>

<tx:methodname="updat*"propagation="REQUIRED"rollback-for="Exception"/>

<tx:methodname="delet*"propagation="REQUIRED"rollback-for="Exception"/>

<tx:methodname="process*"propagation="REQUIRED"rollback-for="Exception"/>

<tx:methodname="*"propagation="SUPPORTS"read-only="true"/>

</tx:attributes>

</txt:advice>

4.3.3

SpringAOP

3.聲明一個通知4.3.3SpringAOP4.4Spring配置文件applicationContext.xml

文件基本結構:<?xmlversion="1.0"encoding="UTF-8“?><!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN""/dtd/spring-beans.dtd"><beans>

<beanid="..."class="...">...</bean><beanid="..."class="...">...</bean>...</beans>4.4Spring配置文件applicationCont<!--

建立數據源

-->

<beanid="dataSource"class="mons.dbcp.BasicDataSource"><!--

數據庫驅動,這里使用的是Mysql數據庫

-->

<propertyname=“driverClassName”>

<value>com.mysql.jdbc.Driver</value>

</property>

<!--

數據庫地址,這里也要注意一下編碼!

-->

<propertyname="url">

<value>jdbc:mysql://localhost:3306/</value>

</property>

<!--

數據庫的用戶名

-->

<propertyname="username"><value>root</value></property>

<!--

數據庫的密碼

-->

<propertyname="password"><value>123</value></property>

</bean><!--

建立數據源

-->

<beanid="dataS<!--

把數據源注入給Session工廠

-->

<beanid="sessionFactory"

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<propertyname="dataSource">

<refbean="dataSource"/>

</property>

<!--

配置映射文件

-->

<propertyname="mappingResources">

<list>

<value>hfut/glxy/model/XshEnt.hbm.xml</value>

</list>

</property>

</bean><!--

把數據源注入給Session工廠

-->

<bea<!--

把DAO注入給Session工廠

-->

<beanid="XshEntDAO"class="hfut.glxy.dao.XshEntDAO">

<propertyname="sessionFactory"><refbean="sessionFactory"/></property></bean>

<!--

把Service注入給DAO-->

<beanid="QryxshxxService"class="hfut.glxy.service.Impl.QryxshxxLmpl">

<propertyname="xshInfoDao"><reflocal="XshEntDAO"/></property></bean><!--

把DAO注入給Session工廠

-->

<bea第四章Spring2.0業務邏輯層技術第四章Spring2.0業務邏輯層技術69教學內容Spring簡介

有關知識補充Spring框架Spring配置文件教學內容Spring簡介4.1Spring簡介——概述Spring是一個開源框架,是為了解決企業應用開發的復雜性而創建的。目的:解決企業應用開發的復雜性。功能:使用基本的JavaBean代替EJB,并提供了更多的企業應用功能。范圍:任何Java應用。簡單來說,Spring是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架。

4.1Spring簡介——概述Spring是一個開源框架,4.1Spring簡介——概述輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發布。并且Spring所需的處理開銷也是微不足道的。非侵入

——在應用中,一般不需要引用springjar包里的類。控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了松耦合。當應用了IoC,某一接口的具體實現類的選擇控制權從調用類中移除,轉交給第三方裁決。面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務()管理)進行內聚性的開發。應用對象只實現它們應該做的——完成業務邏輯——僅此而已。它們并不負責其它的系統級關注點,例如日志或事務支持。

4.1Spring簡介——概述輕量——從大小與開銷兩方面而4.1Spring簡介——容器Spring即是一個容器又是一個框架。容器——Spring包含并管理應用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創建——基于一個可配置原型(prototype),bean可以創建一個單獨的實例或者每次需要時都生成一個新的實例——以及它們是如何相互關聯的。框架——Spring提供了很多基礎的與業務邏輯無關的功能,比如:事務管理、持久化框架集成等等,使用Spring框架,開發人員可以專注于業務邏輯開發,這個意義上講它是一個框架。4.1Spring簡介——容器Spring即是一個容器又是4.1Spring簡介——容器借助于Spring,各種JavaEE技術和服務的使用得到了大大簡化,因為POJO(普通Java對象,與編程模式無關)編程模型被Spring引入到JavaEE的應用開發中。為了使POJO編程模型在Spring框架中可用,Spring引入了SpringDI容器和SpringAOP實現技術,它們在倡導POJO編程模型方面的功勞是最大的。4.1Spring簡介——容器借助于Spring,各種Ja4.1Spring簡介——容器Spring提供的控制反轉(DI)容器能夠管理POJO及各種Java組件。DI負責POJO的管理,比如為它提供事務服務、生命周期服務、線程服務、緩存服務和安全性服務等。與此同時,AOP技術使得應用程序能夠透明地享受到JavaEE容器提供的企業級的服務(如JMX、JCACCI和JMS)。SpringDI容器針對各種DAO層集成技術(如Hibernate、JPA和JDBC)、JavaEE服務及技術提供了一流的集成支持。

4.1Spring簡介——容器Spring提供的控制反轉4.1Spring簡介——框架Spring框架是連接Struts與Hibernate的橋梁,同時它很好地處理了業務邏輯。

Spring框架提供的控制反轉和面向方面編程、插件式架構降低了應用程序之間的依賴性。借助于XML定義文件,開發者能夠在程序運行時連接不同的組件。4.1Spring簡介——框架Spring框架是連接StSpring基本概念IoC=InverseofControlDI=DependenceInjectionAOP面向接口面向抽象核心容器核心容器提供Spring框架的基本功能。核心容器的主要組件是BeanFactory(ApplicationContext).BeanFactory使用控制反轉(IoC)模式將應用程序的配置和依賴性規范與實際的應用程序代碼分開4.1Spring簡介——概念Spring基本概念4.1Spring簡介——概念4.2.1POJO類補充POJO,簡單的Java對象(PlainOrdinaryJavaObjects)實際就是普通JavaBeans,使用POJO名稱是為了避免和EJB混淆起來,而且簡稱比較直接.其中有一些屬性及其gettersetter方法的類。EntityBean(實體Bean)是持久數據組件,代表存儲在外部介質中的持久(Persistence)對象或者已有的企業應用系統資源。簡單地講,一個EntityBean可以代表數據庫中的一行記錄,多個客戶端應用能夠以共享方式訪問表示該數據庫記錄的EntityBean。

4.2.1POJO類補充POJO,簡單的Java對象(Pl4.2.2工廠模式知識補充在面向對象的編程中,工廠模式是一種經常被使用到的模式。工廠模式就是專門負責將大量有共同接口的類實例化,而且不必事先知道每次是要實例化哪一個類的模式。4.2.2工廠模式知識補充在面向對象的編程中,工廠模式是一4.2.2工廠模式知識補充X-----PersonXy---ChineseXz---American工廠類---PersonFactory4.2.2工廠模式知識補充X-----Person4.2.2工廠模式知識補充返回的究竟是Xy還是Xz的實例并不重要,因為它們有相同的方法,只不過這些方法的內部實現不同罷了。public

static

voidmain(String[]args){PersonFactorypf=newPersonFactory();Personp=null;p=pf.getPerson("Chinese");System.out.println(p.sayGoodBye("jack"));System.out.println(p.sayHello("jack"));}4.2.2工廠模式知識補充返回的究竟是Xy還是Xz的實例并4.2.2工廠模式知識補充ApplicationContextcontext=newFileSystemXmlApplicationContext("src/org/test/applicationContext.xml");Personp=(Chese)context.getBean("chese");System.out.println(p.sayGoodBye("rose"));System.out.println(p.sayHello("rose"));4.2.2工廠模式知識補充ApplicationConte

4.3Spring框架組成Spring框架組成控制反轉IoC(依賴注入DI)面向方面(AOP)4.3Spring框架組成Spring框架組成

4.3Spring框架組成Spring是一個分層框架,由若干定義好的模塊組成如下圖所示。Spring2.0所有模塊定義在核心容器之上,核心容器定義了創建、配置和管理bean的方式。4.3Spring框架組成Spring是一個分層框架Spring2.5的模塊Spring2.5內核(IoC容器)AOP技術實現SpringAOPAspectJ5無縫集成DAOSpringJDBC集成事務管理ORMHibernateJPATopLinkiBATSJavaEE服務及技術JMXJMSEJB3.0組件技術郵件服務遠程服務腳本技術集成線程池、任務調度支持WebSpringWebMVCWeb框架集StrutsWebworkTypestryJSF富視圖支持VelocityFreeMakerPDFJsperReportsExcelSpringPortletMVCSpring2.5的模塊Spring2.5內核(IoC容器)

4.3Spring框架在IoC容器、AOP技術實現的基礎上,存在各式各樣的DAO層集成技術、JavaEE服務及技術、Web層支持。4.3Spring框架在IoC容器、AOP技術實現4.3.1

Spring控制反轉(IoC)控制反轉IoC(InversionofControl)是Spring中最核心最重要的概念。借助于IoC,實現“面向接口編程,而不是面向實現編程”。4.3.1Spring控制反轉(IoC)控制反轉IoC4.3.1Spring控制反轉(IoC)IoC模式,即由容器控制程序之間的依賴關系,而不是由程序代碼直接控制,控制權的轉移就是反轉。依賴關系意指類之間的訪問關系。如果類A訪問類B的屬性或方法,或者類A實例化類B,則稱類A依賴于類B。4.3.1Spring控制反轉(IoC)IoC模式,即由4.3.1Spring控制反轉(IoC)IoC設計模式將創建對象實例的任務交給IoC容器,應用代碼只需直接使用實例。實現了IoC模式的框架叫IoC容器。IoC的另一個名字叫依賴注入(dependencyInjection)-組件之間的依賴關系由容器在運行時決定,形象地講,就是由容器動態地將某種依賴關系注入到組件中。4.3.1Spring控制反轉(IoC)IoC設計模式將4.3.1Spring控制反轉(IoC)依賴注入(DependencyInjection)和控制反轉(InversionofControl)是同一個概念。具體含義是:當某個對象(可能是一個Java實例,調用者)需要另一個對象(另一個Java實例,被調用者)的協助時,在傳統的程序設計過程中,通常由調用者來創建被調用者的實例。但在Spring里,創建被調用者的工作不再由調用者來完成,因此稱為控制反轉;創建被調用者實例的工作通常由Spring容器來完成,然后注入調用者,因此也稱為依賴注入。4.3.1Spring控制反轉(IoC)依賴注入(Dep4.3.1Spring控制反轉(IoC)IOC特點4.3.1Spring控制反轉(IoC)IOC特點4.3.1Spring控制反轉(IoC)IoC的優點:不必關心組件的創建不必管理組件的生命周期

組件容易共享

測試非常容易4.3.1Spring控制反轉(IoC)IoC的優點:4.3.1Spring控制反轉(IoC)Spring提供的兩個IoC容器(BeanFactory和ApplicationContext)(見工廠模式知識補充)BeanFactory主要適用于環境、內容受限的場合,如在Applet環境中,BeanFactory是最基礎的IoC容器,它提供了配置框架和基礎功能。ApplicationContext繼承于BeanFactory,更適合于企業級的應用開發,重點討論。4.3.1Spring控制反轉(IoC)Spring提供4.3.1Spring控制反轉(IoC)BeanFactory可將IoC容器比做食品加工廠。在提供源材料(POJO類)后,經過加工工藝和設備(SpringIoC和SpringAOP)處理后,顧客得到滿意的食品(受管POJO,可能裝備了事務、安全等功能)。4.3.1Spring控制反轉(IoC)BeanFact4.3.1Spring控制反轉(IoC)IoC原理默認時,配置的POJO都是單例的,即整個IoC容器僅有一個對應的POJO實例,而不是每次調用時產生一個實例(原型的)。在初始化BeanFactory實例factory后,IoC容器并不預先實例化在配置文件中聲明的POJO實例。只是在應用程序調用對應的POJO時,Spring才會實例化用到的受管POJO。4.3.1Spring控制反轉(IoC)IoC原理4.3.1Spring控制反轉(IoC)IoC原理Spring支持三種主流的IoC注入類型設值(setter)注入、購造器注入和方法注入。設值注入指通過調用無參構造器實例化受管POJO后,調用setter方法設置對象間的依賴關系。構造器注入往構造器傳入若干參數完成依賴注入,傳入的參數都是受管POJO依賴的對象。4.3.1Spring控制反轉(IoC)IoC原理4.3.1Spring控制反轉(IoC)ApplicationContextIoC容器建立在BeanFactory基礎之上,對企業級應用開發提供了更多支持,增加了國際化消息(i18n)支持、事件傳送(發送和消費事件)支持、訪問低層資源(.URL和java.io.File)、IoC容器分層(面向架構分層)等。4.3.1Spring控制反轉(IoC)Applicat4.3.1Spring控制反轉(IoC)ApplicationContext

SpringIoC為ApplicationContext提供了許多實現類,ClassPathXmlApplicationContext和

FileSystemXmlApplicationContext使用最為頻繁。4.3.1Spring控制反轉(IoC)Applicat4.3.1Spring控制反轉(IoC)IoC在web應用中的原理在web應用中,Spring會使用ApplicationContext的XmlApplicationContext來完成容器的創建工作。與BeanFactory不同的是:在構建ApplicationContext(IoC容器)過程中,Spring會自動實例化XML中定義的各個單例。4.3.1Spring控制反轉(IoC)IoC在web應4.3.1Spring控制反轉(IoC)加載IoC容器到Web應用中IoC容器也是對象,需要實例化、提供方式使DI與應用程序能交互、不使用時銷毀它。Spring提供contextLoaderListener和ContextLoaderservlet輔助類解決以上問題。對于支持Servletcontextlistener的web容器,開發者只需在web.xml中配置上下文參數即可。4.3.1Spring控制反轉(IoC)加載IoC容器到4.3.1Spring控制反轉(IoC)Spring的web.xml配置Spring的MVC框架是一個請求驅動的Web框架,其設計圍繞一個中心的Servlet進行,它能將請求分發給控制器,并提供其他功能幫助Web應用開發。基于Struts+Spring+Hibernate的聯合應用中,接收請求的Servlet是由Struts的ActionServlet來配置的,因此不使用DispatcherServlet來接收請求了。而是在web.xml中配置一個監聽器,并通過<context-param>加載Spring配置。如下所示:

4.3.1Spring控制反轉(IoC)Spring的<!--

contextConfigLocation參數定義了web工程要加載的spring配置文件

--><context-param><param-name>contextconfigLocation</param-name><param-value>

/WEB-INF/applicationContextcon.xml</param-value></context-param>注意:contextConfigLocation參數名稱是系統默認解析的參數,不能換成任意別的名稱,否則系統將加載默認路徑/WEB-INF/applicationContext.xml文件,如果找不到,就會報錯。4.3.1Spring控制反轉(IoC)<!--

contextConfigLocation參數定義<!--

注冊spring監聽器--><listener><listener-class>

org.springframework.web.context.ContextLoaderListener</listener-class></listener>4.3.1Spring控制反轉(IoC)<!--

注冊spring監聽器-->4.3.1Spri一個例子:一個人需要一把斧子.模型:調用者:人被調用者:斧子4.3.1依賴注入——例子一個例子:4.3.1依賴注入——例子三種方式實現:一原始社會:調用者自己創建被調用者二工業社會:調用者向工廠要被調用者三服務型社會:被調用者主動送上門4.3.1依賴注入——例子三種方式實現:4.3.1依賴注入——例子4.3.1依賴注入——例子兩種方法注入

構造方法注入

設置屬性注入4.3.1依賴注入——例子兩種方法注入4.3.1依賴注入——例子設值注入:指通過setter方法傳入被調用者的實例。public

classChineseimplementsPerson{

privateAxeaxe;publicAxegetAxe(){returnaxe;}public

voidsetAxe(Axeaxe){this.axe=axe;}public

voiduseAxe(){axe.chop();}}4.3.1依賴注入——例子設值注入:指通過setter方法設置注入<beanid="chinese"class="org.spring.Chinese"abstract="false“singleton="true"lazy-init="default"autowire="default“dependency-check="default"><propertyname="axe"><refbean="stoneAxe"/></property></bean>4.3.1依賴注入——例子設置注入4.3.1依賴注入——例子4.3.1依賴注入——例子構造注入:指通過構造函數來完成依賴關系的設定,而不是通過setter方法。public

classAmericanimplementsPerson{

privateAxeaxe;

publicAmerican(Axeaxe){

this.axe=axe;}public

voiduseAxe(){axe.chop();}}4.3.1依賴注入——例子構造注入:指通過構造函數來完成依構造注入<beanid="american"class="org.spring.American"abstract="false“singleton="true"lazy-init="default"autowire="default“dependency-check="default"><constructor-arg><refbean="steelAxe"/></constructor-arg></bean>4.3.1依賴注入——例子構造注入4.3.1依賴注入——例子4.3.1依賴注入——例子兩種注入方式比較:設值注入優點:設值注入與傳統的JavaBean的寫法更相似,所以更直觀,自然。對于復雜的依賴關系,采用構造注入,會導致構造器過于臃腫,難以閱讀在某些屬性可選的情況下,多參數的構造器更加笨重4.3.1依賴注入——例子兩種注入方式比較:4.3.1依賴注入——例子兩種注入方式比較:構造注入優點:可以在構造器中決定依賴關系的注入順序對于依賴關系無需變化的bean,構造注入更有用處依賴關系只能在構造器中設定,組件內部的依賴關系完全透明,更符合高內聚的原則4.3.1依賴注入——例子兩種注入方式比較:4.3.2面向方面編程(AOP)主要內容AOP概述AOP的基本概念Spring中的AOP4.3.2面向方面編程(AOP)主要內容4.3.2.1AOP概述OOP(Object-OrientedProgramming,又稱面向對象編程)。OOP更多的關注系統的垂直切面關注的問題,而對系統的橫切面比如:日志、安全性、事務管理等關注很少,或者說很難關注。AOP:面向切面編程(Aspect-OrientedProgramming),是OOP的延續。AOP將分布在各個類中具有相同功能的代碼片段整合到一起,由單獨的功能模塊完成,不僅減少了代碼的重復量,降低了耦合,也提高了代碼的可維護性。

不要認為AOP會取代OOP,它只是OOP的補充。AOP概述OOP(Object-Orien4.3.2.1AOP概述AOP的作用就是在可以順序執行的程序中,插入某些特殊的邏輯來實現一些特殊的功能,例如日志、事務、安全等都可以很方便的使用AOP來實現。采用AOP之前采用AOP之后AOP概述AOP的作用就是在可以順序執行的4.3.2.1AOP概述關注點分類

使用“橫切”技術,AOP把軟件系統分為兩個部分:

核心關注點主要關注系統的業務邏輯;橫切關注點主要關注系統級的服務,供業務邏輯使用。關注點核心關注點橫切關注點AOP概述關注點分類關注點核心關注點橫切關注4.3.2.1AOP概述現實狀態業務邏輯中,到處都涉及橫切關注點。因此對各個已經實現的模塊(業務邏輯)而言,都有大量的橫切關注點實現。新的方案業務邏輯用OO技術實現;橫切關注點用AOP技術實現。橫切關注點是系統級服務,對大部分應用是常見的,容易抽象出來,并加以實現。AOP概述現實狀態4.3.2.1AOP概述實現AOP的總體模式OO技術將應用中的核心關注點分解成由層次(繼承)結構組成的領域對象集合。AOP將應用中的橫切關注點分解成由切面(Aspect)組成的生態子系統。它們被分別實現,互為補充,使得應用的開發變得簡單、可維護性得到增強。AOP概述實現AOP的總體模式4.3.2.2

AOP的基本概念各種AOP實現切面的技術、框架、機制、手段可能不同,但是AOP技術的基本概念是相同的。包括以下7個術語連接點(joinpoint)、切入點(cutpoint)、

裝備(advice)、引入(introduction)、

目標對象(targetobject)、織入(weaving)

切面(Aspect)。AOP的基本概念各種AOP實現切面的技術、框4.3.2.2

AOP的基本概念連接點(Joinpoint)連接點是程序執行中的一個精確執行點,如執行到某個方法、訪問到某個成員變量、拋出某異常、裝載某個類。通常用連接點的強弱來衡量AOP實現的強弱。實現連接點的方法有很多,SpringAOP僅支持方法級連接點。也就是說,只有在方法執行時才能加AOP。它是一個抽象的概念,在實現AOP時,并不需要去定義一個joinpoint。AOP的基本概念連接點(Joinpoint)4.3.2.2

AOP的基本概念切入點(pointcut)通過切入點能夠聲明、集結連接點。在AOP中,可以定義一個pointcut,來捕獲相關方法的調用。通常裝備與切入點關聯在一起,一旦某連接點被觸發,則會立即執行相應的裝備。開發者借助于pointcut表達語言來完成pointcut的指定工作。AOP的基本概念切入點(pointcut)4.3.2.2

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論