市場營銷第章Sring業(yè)務(wù)邏輯層技術(shù)_第1頁
市場營銷第章Sring業(yè)務(wù)邏輯層技術(shù)_第2頁
市場營銷第章Sring業(yè)務(wù)邏輯層技術(shù)_第3頁
市場營銷第章Sring業(yè)務(wù)邏輯層技術(shù)_第4頁
市場營銷第章Sring業(yè)務(wù)邏輯層技術(shù)_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第四章Spring2.0業(yè)務(wù)邏輯層技術(shù)教學(xué)內(nèi)容Spring簡介

有關(guān)知識(shí)補(bǔ)充Spring框架Spring配置文件34.1Spring簡介——概述Spring是一個(gè)開源框架,是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。目的:解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性。功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能。范圍:任何Java應(yīng)用。簡單來說,Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。

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

——在應(yīng)用中,一般不需要引用springjar包里的類??刂品崔D(zhuǎn)——Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,某一接口的具體實(shí)現(xiàn)類的選擇控制權(quán)從調(diào)用類中移除,轉(zhuǎn)交給第三方裁決。面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)()管理)進(jìn)行內(nèi)聚性的開發(fā)。應(yīng)用對象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。

54.1Spring簡介——容器Spring即是一個(gè)容器又是一個(gè)框架。容器——Spring包含并管理應(yīng)用對象的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配置你的每個(gè)bean如何被創(chuàng)建——基于一個(gè)可配置原型(prototype),bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例——以及它們是如何相互關(guān)聯(lián)的??蚣堋猄pring提供了很多基礎(chǔ)的與業(yè)務(wù)邏輯無關(guān)的功能,比如:事務(wù)管理、持久化框架集成等等,使用Spring框架,開發(fā)人員可以專注于業(yè)務(wù)邏輯開發(fā),這個(gè)意義上講它是一個(gè)框架。4.1Spring簡介——容器借助于Spring,各種JavaEE技術(shù)和服務(wù)的使用得到了大大簡化,因?yàn)镻OJO(普通Java對象,與編程模式無關(guān))編程模型被Spring引入到JavaEE的應(yīng)用開發(fā)中。為了使POJO編程模型在Spring框架中可用,Spring引入了SpringDI容器和SpringAOP實(shí)現(xiàn)技術(shù),它們在倡導(dǎo)POJO編程模型方面的功勞是最大的。4.1Spring簡介——容器Spring提供的控制反轉(zhuǎn)(DI)容器能夠管理POJO及各種Java組件。DI負(fù)責(zé)POJO的管理,比如為它提供事務(wù)服務(wù)、生命周期服務(wù)、線程服務(wù)、緩存服務(wù)和安全性服務(wù)等。與此同時(shí),AOP技術(shù)使得應(yīng)用程序能夠透明地享受到JavaEE容器提供的企業(yè)級(jí)的服務(wù)(如JMX、JCACCI和JMS)。SpringDI容器針對各種DAO層集成技術(shù)(如Hibernate、JPA和JDBC)、JavaEE服務(wù)及技術(shù)提供了一流的集成支持。

4.1Spring簡介——框架Spring框架是連接Struts與Hibernate的橋梁,同時(shí)它很好地處理了業(yè)務(wù)邏輯。

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

工廠廠模模式式知知識(shí)識(shí)補(bǔ)補(bǔ)充充在面面向向?qū)ο笙蟮牡木幘幊坛讨兄校すS廠模模式式是是一一種種經(jīng)經(jīng)常常被被使使用用到到的的模模式式。。工廠廠模模式式就就是是專專門門負(fù)負(fù)責(zé)責(zé)將將大大量量有有共共同同接接口口的的類類實(shí)實(shí)例例化化,而且且不不必必事事先先知知道道每每次次是是要要實(shí)實(shí)例例化化哪哪一一個(gè)個(gè)類類的的模模式式。。工廠廠模模式式知知識(shí)識(shí)補(bǔ)補(bǔ)充充X-----PersonXy---ChineseXz---American工廠廠類類---PersonFactory工廠廠模模式式知知識(shí)識(shí)補(bǔ)補(bǔ)充充返回回的的究究竟竟是是Xy還是是Xz的實(shí)實(shí)例例并并不不重重要要,,因因?yàn)闉樗鼈儌冇杏邢嘞嗤牡姆椒椒ǚǎ?,只只不不過過這這些些方方法法的的內(nèi)內(nèi)部部實(shí)實(shí)現(xiàn)現(xiàn)不不同同罷罷了了。。publicstaticvoidmain(String[]args){PersonFactorypf=newPersonFactory();Personp=null;p=pf.getPerson("Chinese");System.out.println(p.sayGoodBye("jack"));System.out.println(p.sayHello("jack"));}工廠廠模模式式知知識(shí)識(shí)補(bǔ)補(bǔ)充充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.3Spring框架組成成Spring框架組成成控制反轉(zhuǎn)轉(zhuǎn)IoC(依賴注注入DI)面向方面面(AOP))4.3Spring框架組成成Spring是一個(gè)分分層框架架,由若若干定義義好的模模塊組成成如下圖圖所示。。Spring2.0所有模塊塊定義在在核心容容器之上上,核心心容器定定義了創(chuàng)創(chuàng)建、配配置和管管理bean的方式。。Spring2.5的模塊Spring2.5內(nèi)核(IoC容器)AOP技術(shù)實(shí)現(xiàn)現(xiàn)SpringAOPAspectJ5無縫集成成DAOSpringJDBC集成事務(wù)管理理ORMHibernateJPATopLinkiBATSJavaEE服務(wù)及技技術(shù)JMXJMSEJB3.0組件技術(shù)術(shù)郵件服務(wù)務(wù)遠(yuǎn)程服務(wù)務(wù)腳本技術(shù)術(shù)集成線程池、、任務(wù)調(diào)調(diào)度支持持WebSpringWebMVCWeb框架集StrutsWebworkTypestryJSF富視圖支支持VelocityFreeMakerPDFJsperReportsExcelSpringPortletMVC4.3Spring框架在IoC容器、AOP技術(shù)實(shí)現(xiàn)現(xiàn)的基礎(chǔ)礎(chǔ)上,存存在各式式各樣的的DAO層集成技技術(shù)、JavaEE服務(wù)及技技術(shù)、Web層支持。。4.3.1Spring控制反轉(zhuǎn)轉(zhuǎn)(IoC)控制反轉(zhuǎn)轉(zhuǎn)IoC((InversionofControl)是Spring中最核心心最重要要的概念念。借助于IoC,,實(shí)現(xiàn)“面向接口口編程,,而不是是面向?qū)崒?shí)現(xiàn)編程程”??刂品崔D(zhuǎn)轉(zhuǎn)(IoC)IoC模式,即即由容器控制程序序之間的的依賴關(guān)關(guān)系,而而不是由由程序代代碼直接接控制,,控制權(quán)權(quán)的轉(zhuǎn)移移就是反反轉(zhuǎn)。依賴關(guān)系系意指類之之間的訪訪問關(guān)系系。如果類A訪問類B的屬性或或方法,,或者類類A實(shí)例化類類B,則稱類類A依賴于類類B??刂品崔D(zhuǎn)轉(zhuǎn)(IoC)IoC設(shè)計(jì)模式式將創(chuàng)建對對象實(shí)例例的任務(wù)務(wù)交給IoC容器,應(yīng)應(yīng)用代碼碼只需直直接使用用實(shí)例。。實(shí)現(xiàn)了IoC模式的框架叫叫IoC容器。IoC的另一個(gè)名字字叫依賴注入入(dependencyInjection))-組件之間的依依賴關(guān)系由容容器在運(yùn)行時(shí)時(shí)決定,形象象地講,就是是由容器動(dòng)態(tài)地將將某種依賴關(guān)關(guān)系注入到組組件中??刂品崔D(zhuǎn)(IoC)依賴注入(DependencyInjection)和控制反轉(zhuǎn)(InversionofControl)是同一個(gè)概念念。具體含義義是:當(dāng)某個(gè)對象(可能是一個(gè)Java實(shí)例,調(diào)用者者)需要另一個(gè)對對象(另一個(gè)Java實(shí)例,被調(diào)用用者)的協(xié)助時(shí),在在傳統(tǒng)的程序序設(shè)計(jì)過程中中,通常由調(diào)用者來創(chuàng)建建被調(diào)用者的的實(shí)例。但在Spring里,創(chuàng)建被調(diào)調(diào)用者的工作作不再由調(diào)用用者來完成,,因此稱為控控制反轉(zhuǎn);創(chuàng)建被調(diào)用者者實(shí)例的工作作通常由Spring容器來完成,,然后注入調(diào)調(diào)用者,因此也稱為為依賴注入。??刂品崔D(zhuǎn)(IoC)IOC特點(diǎn)控制反轉(zhuǎn)(IoC)IoC的優(yōu)點(diǎn):不必關(guān)心組件件的創(chuàng)建不必管理組件件的生命周期期組件容易共享享測試非常容易易控制反轉(zhuǎn)(IoC)Spring提供的兩個(gè)IoC容器(BeanFactory和ApplicationContext)(見工廠模式知知識(shí)補(bǔ)充)BeanFactory主要適用于環(huán)環(huán)境、內(nèi)容受受限的場合,,如在Applet環(huán)境中,BeanFactory是最基礎(chǔ)的IoC容器,它提供供了配置框架架和基礎(chǔ)功能能。ApplicationContext繼承于BeanFactory,更適合于企企業(yè)級(jí)的應(yīng)用用開發(fā),重點(diǎn)點(diǎn)討論??刂品崔D(zhuǎn)(IoC)BeanFactory可將IoC容器比做食品品加工廠。在在提供源材料料(POJO類)后,經(jīng)過過加工工藝和和設(shè)備(SpringIoC和SpringAOP)處理后,顧顧客得到滿意意的食品(受受管POJO,可能裝備了了事務(wù)、安全全等功能)。??刂品崔D(zhuǎn)(IoC)IoC原理默認(rèn)時(shí),配置置的POJO都是單例的,,即整個(gè)IoC容器僅有一個(gè)個(gè)對應(yīng)的POJO實(shí)例,而不是是每次調(diào)用時(shí)時(shí)產(chǎn)生一個(gè)實(shí)實(shí)例(原型的的)。在初始化BeanFactory實(shí)例factory后,IoC容器并不預(yù)先先實(shí)例化在配配置文件中聲聲明的POJO實(shí)例。只是在在應(yīng)用程序調(diào)調(diào)用對應(yīng)的POJO時(shí),Spring才會(huì)實(shí)例化用用到的受管POJO。控制反轉(zhuǎn)(IoC)IoC原理Spring支持三種主流流的IoC注入類型設(shè)值(setter)注入、購造造器注入和方方法注入。設(shè)值注入指通過調(diào)用無無參構(gòu)造器實(shí)實(shí)例化受管POJO后,調(diào)用setter方法設(shè)置對象象間的依賴關(guān)關(guān)系。構(gòu)造器注入往構(gòu)造器傳入入若干參數(shù)完完成依賴注入入,傳入的參參數(shù)都是受管管POJO依賴的對象。??刂品崔D(zhuǎn)(IoC)ApplicationContextIoC容器建立在BeanFactory基礎(chǔ)之上,對企業(yè)級(jí)應(yīng)用用開發(fā)提供了了更多支持,增加了國際化化消息(i18n)支持、事件件傳送(發(fā)送送和消費(fèi)事件件)支持、訪訪問低層資源源(和java.io.File)、IoC容器分層(面面向架構(gòu)分層層)等??刂品崔D(zhuǎn)(IoC)ApplicationContextSpringIoC為ApplicationContext提供了許多實(shí)實(shí)現(xiàn)類,ClassPathXmlApplicationContext和FileSystemXmlApplicationContext使用最為頻繁繁??刂品崔D(zhuǎn)(IoC)IoC在web應(yīng)用中的原理理在web應(yīng)用中,Spring會(huì)使用ApplicationContext的XmlApplicationContext來完成容器的的創(chuàng)建工作。。與BeanFactory不同的是:在在構(gòu)建ApplicationContext(IoC容器)過程中中,Spring會(huì)自動(dòng)實(shí)例化化XML中定義的各個(gè)個(gè)單例??刂品崔D(zhuǎn)(IoC)加載IoC容器到Web應(yīng)用中IoC容器也是對象象,需要實(shí)例例化、提供方方式使DI與應(yīng)用程序能能交互、不使使用時(shí)銷毀它它。Spring提供contextLoaderListener和ContextLoaderservlet輔助類解決以以上問題。對對于支持Servletcontextlistener的web容器,開發(fā)者者只需在web.xml中配置上下文文參數(shù)即可。??刂品崔D(zhuǎn)(IoC)Spring的web.xml配置Spring的MVC框架是一個(gè)請請求驅(qū)動(dòng)的Web框架,其設(shè)計(jì)計(jì)圍繞一個(gè)中中心的Servlet進(jìn)行,它能將將請求分發(fā)給給控制器,并并提供其他功功能幫助Web應(yīng)用開發(fā)?;赟truts+Spring+Hibernate的聯(lián)合應(yīng)用中中,接收請求求的Servlet是由Struts的ActionServlet來配置的,因因此不使用DispatcherServlet來接收請求了了。而是在web.xml中配置一個(gè)監(jiān)監(jiān)聽器,并通通過<context-param>加載Spring配置。如下所所示:<!--contextConfigLocation參數(shù)定義了web工程要加載的的spring配置文件--><context-param><param-name>contextconfigLocation</param-name><param-value>/WEB-INF/applicationContextcon.xml</param-value></context-param>注意:contextConfigLocation參數(shù)名稱是系系統(tǒng)默認(rèn)解析析的參數(shù),不不能換成任意意別的名稱,,否則系統(tǒng)將將加載默認(rèn)路路徑/WEB-INF/applicationContext.xml文件,如果找找不到,就會(huì)會(huì)報(bào)錯(cuò)??刂品崔D(zhuǎn)(IoC)<!--注冊spring監(jiān)聽器--><listener><listener-class></listener-class></listener>控制反轉(zhuǎn)(IoC)一個(gè)例子:一個(gè)人需要一一把斧子.模型:調(diào)用者:人被調(diào)用者:斧子依賴注入——例子三種方式實(shí)現(xiàn)現(xiàn):一原始社社會(huì):調(diào)用者自己創(chuàng)創(chuàng)建被調(diào)用者者二工業(yè)社社會(huì):調(diào)用者者向工廠要被被調(diào)用者三服務(wù)型型社會(huì):被調(diào)調(diào)用者主動(dòng)送送上門依賴注入——例子依賴注入——例子兩種方法注入入構(gòu)造方法注入入設(shè)置屬性注入入依賴注入——例子設(shè)值注入:指指通過setter方法傳入被調(diào)用者者的實(shí)例。publicclassChineseimplementsPerson{privateAxeaxe;publicAxegetAxe(){returnaxe;}publicvoidsetAxe(Axeaxe){this.axe=axe;}publicvoiduseAxe(){axe.chop();}}設(shè)置注入<beanid="chinese"class="org.spring.Chinese"abstract="false“singleton="true"lazy-init="default"autowire="default“dependency-check="default"><propertyname="axe"><refbean="stoneAxe"/></property></bean>依賴注入——例子依賴注入——例子構(gòu)造注入:指指通過構(gòu)造函函數(shù)來完成依依賴關(guān)系的設(shè)設(shè)定,而不是是通過setter方法。publicclassAmericanimplementsPerson{privateAxeaxe;publicAmerican(Axeaxe){this.axe=axe;}publicvoiduseAxe(){axe.chop();}}構(gòu)造注入<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>依賴注入——例子依賴注入——例子兩種注入方方式比較::設(shè)值注入優(yōu)優(yōu)點(diǎn):設(shè)值注入與與傳統(tǒng)的JavaBean的寫法更相相似,所以以更直觀,,自然。對于復(fù)雜的的依賴關(guān)系系,采用構(gòu)構(gòu)造注入,,會(huì)導(dǎo)致構(gòu)構(gòu)造器過于于臃腫,難難以閱讀在某些屬性性可選的情情況下,多多參數(shù)的構(gòu)構(gòu)造器更加加笨重依賴注入——例子兩種注入方方式比較::構(gòu)造注入優(yōu)優(yōu)點(diǎn):可以在構(gòu)造造器中決定定依賴關(guān)系系的注入順順序?qū)τ谝蕾囮P(guān)關(guān)系無需變變化的bean,構(gòu)造注入入更有用處處依賴關(guān)系只只能在構(gòu)造造器中設(shè)定定,組件內(nèi)內(nèi)部的依賴賴關(guān)系完全全透明,更更符合高內(nèi)內(nèi)聚的原則則面向方面編編程(AOP)主要內(nèi)容AOP概述AOP的基本概念念Spring中的AOP4.3.2.1AOP概述OOP(Object-OrientedProgramming,又稱面向向?qū)ο缶幊坛蹋?。OOP更多的關(guān)注注系統(tǒng)的垂垂直切面關(guān)關(guān)注的問題題,而對系系統(tǒng)的橫切切面比如::日志、安安全性、事事務(wù)管理等等關(guān)注很少少,或者說說很難關(guān)注注。AOP:面向切面編編程(Aspect-OrientedProgramming),是OOP的延續(xù)。AOP將分布在各各個(gè)類中具具有相同功功能的代碼碼片段整合合到一起,,由單獨(dú)的的功能模塊塊完成,不不僅減少了了代碼的重重復(fù)量,降降低了耦合合,也提高高了代碼的的可維護(hù)性性。不要認(rèn)為AOP會(huì)取代OOP,它只是OOP的補(bǔ)充。4.3.2.1AOP概述AOP的作用就是是在可以順順序執(zhí)行的的程序中,,插入某些些特殊的邏邏輯來實(shí)現(xiàn)現(xiàn)一些特殊殊的功能,,例如日日志、事務(wù)務(wù)、安全等等都可以很很方便的使使用AOP來實(shí)現(xiàn)。采用AOP之前采用AOP之后4.3.2.1AOP概述關(guān)注點(diǎn)分類類使用“橫切”技術(shù),AOP把軟件系統(tǒng)統(tǒng)分為兩個(gè)個(gè)部分:核心關(guān)注點(diǎn)點(diǎn)主要關(guān)注注系統(tǒng)的業(yè)業(yè)務(wù)邏輯;;橫切關(guān)注點(diǎn)點(diǎn)主要關(guān)注注系統(tǒng)級(jí)的的服務(wù),供供業(yè)務(wù)邏輯輯使用。關(guān)注點(diǎn)核心關(guān)注點(diǎn)橫切關(guān)注點(diǎn)4.3.2.1AOP概述現(xiàn)實(shí)狀態(tài)業(yè)務(wù)邏輯中中,到處都都涉及橫切切關(guān)注點(diǎn)。。因此對各各個(gè)已經(jīng)實(shí)實(shí)現(xiàn)的模塊塊(業(yè)務(wù)邏邏輯)而言言,都有大大量的橫切切關(guān)注點(diǎn)實(shí)實(shí)現(xiàn)。新的方案業(yè)務(wù)邏輯用用OO技術(shù)實(shí)現(xiàn);;橫切關(guān)注點(diǎn)點(diǎn)用AOP技術(shù)實(shí)現(xiàn)。。橫切關(guān)注點(diǎn)點(diǎn)是系統(tǒng)級(jí)級(jí)服務(wù),對對大部分應(yīng)應(yīng)用是常見見的,容易易抽象出來來,并加以以實(shí)現(xiàn)。4.3.2.1AOP概述實(shí)現(xiàn)AOP的總體模式式OO技術(shù)將應(yīng)用用中的核心心關(guān)注點(diǎn)分分解成由層層次(繼承承)結(jié)構(gòu)組組成的領(lǐng)域域?qū)ο蠹虾稀OP將應(yīng)用中的的橫切關(guān)注注點(diǎn)分解成成由切面((Aspect)組成的生生態(tài)子系統(tǒng)統(tǒng)。它們被分別別實(shí)現(xiàn),互互為補(bǔ)充,,使得應(yīng)用用的開發(fā)變變得簡單、、可維護(hù)性性得到增強(qiáng)強(qiáng)。4.3.2.2AOP的基本概念念各種AOP實(shí)現(xiàn)切面的的技術(shù)、框框架、機(jī)制制、手段可可能不同,,但是AOP技術(shù)的基本本概念是相相同的。包括以下77個(gè)術(shù)語連接點(diǎn)(joinpoint)、切入點(diǎn)點(diǎn)(cutpoint)、裝備(advice)、引入((introduction)、目標(biāo)對象((targetobject)、織入((weaving)切面(Aspect)。4.3.2.2AOP的基本概念念連接點(diǎn)(Joinpoint)連接點(diǎn)是程序執(zhí)行行中的一個(gè)個(gè)精確執(zhí)行行點(diǎn),如執(zhí)行到某某個(gè)方法、、訪問到某某個(gè)成員變變量、拋出出某異常、、裝載某個(gè)個(gè)類。通常用連接接點(diǎn)的強(qiáng)弱弱來衡量AOP實(shí)現(xiàn)的強(qiáng)弱弱。實(shí)現(xiàn)連連接點(diǎn)的方方法有很多多,SpringAOP僅支持方法法級(jí)連接點(diǎn)點(diǎn)。也就是說,,只有在方方法執(zhí)行時(shí)時(shí)才能加AOP。它是一個(gè)抽抽象的概念念,在實(shí)現(xiàn)現(xiàn)AOP時(shí),并不需需要去定義義一個(gè)joinpoint。4.3.2.2AOP的基本概念念切入點(diǎn)(pointcut)通過切入點(diǎn)點(diǎn)能夠聲明明、集結(jié)連連接點(diǎn)。在AOP中,可以定定義一個(gè)pointcut,來捕獲相相關(guān)方法的的調(diào)用。通常裝備與與切入點(diǎn)關(guān)關(guān)聯(lián)在一起起,一旦某某連接點(diǎn)被被觸發(fā),則則會(huì)立即執(zhí)執(zhí)行相應(yīng)的的裝備。開開發(fā)者借助助于pointcut表達(dá)語言來來完成pointcut的指定工作作。4.3.2.2AOP的基本概念念裝備(Advice)裝備指切面(aspect)在特定連接接點(diǎn)所采取取的動(dòng)作。特定連接接點(diǎn)由切入入點(diǎn)(pointcut)指定。主要的裝備備類型包括括:Before、AfterReturning、AfterThrowing、After、Around。Before裝備能夠在特定連接接點(diǎn)被觸發(fā)發(fā)前執(zhí)行,,其它類似似。4.3.2.2AOP的基本概念念引入(introducion)引入也稱為為inter-type聲明(AspectJ6)。將新的的接口、方方法、成員員變量動(dòng)態(tài)態(tài)引入到目目標(biāo)類、接接口或切面面中。不改變一個(gè)個(gè)現(xiàn)有類代代碼的情況況下,為該該類添加屬屬性和方法法簡單講為對象引入入附加的方方法或?qū)傩孕?,從而達(dá)達(dá)到修改對對象結(jié)構(gòu)的的目的。有有的AOP工具又將其其稱為mixin。目標(biāo)對象((targetObject)被若干切面面(aspect)裝配過的的對象,也也被稱為被被裝備的對對象。4.3.2.2AOP的基本概念念織入(weaving)將切面與目目標(biāo)對象組組裝在一起起的過程稱稱為織入。。通過織入入創(chuàng)建一個(gè)個(gè)被裝備的的對象。織入時(shí)機(jī)有有編譯期、、裝載期、、運(yùn)行期。。不同的AOP實(shí)現(xiàn)支持不不同織入時(shí)時(shí)機(jī)。SringAOP支持運(yùn)行期期織入。把把切面加入入程序代碼碼的過程。。4.3.2.2AOP的基本概念念切面(aspect)與OOP中對象的概概念一樣,,是AOP中的核心概概念。方面將pointcut、裝備、引引入、目標(biāo)標(biāo)對象等信信息集結(jié)在在一起,從從而定義相相應(yīng)的織入入規(guī)則,這這樣一個(gè)整整體稱為切切面(aspect)。4.3.3SpringAOP的基本概念念實(shí)現(xiàn)AOP的技術(shù),主主要分為兩兩大類1.采用動(dòng)態(tài)代代理技術(shù),,利用截取取消息的方方式,對該該消息進(jìn)行行裝飾,以以取代原有有對象行為為的執(zhí)行;;2.采用靜態(tài)織織入的方式式,引入特特定的語法法創(chuàng)建“方面”,從而使得得編譯器可可以在編譯譯期間織入入有關(guān)“方面面”的代代碼碼。。4.3.3SpringAOP概述述AOP允許許開開發(fā)發(fā)者者動(dòng)態(tài)態(tài)地修修改改OOP定義義的的靜態(tài)態(tài)模型型,,即即不不用用修修改改原原來來的的OO模型型,,甚甚至至可可以以不不修修改改OO代碼碼本本身身,,即即可可完完成成對對橫橫切切面面問問題題的的解解決決。。比比如如,,將將系系統(tǒng)統(tǒng)中中處處理理日日志志、、安安全全性性、、事事務(wù)務(wù)及及其其他他企企業(yè)業(yè)級(jí)級(jí)服服務(wù)務(wù)集集中中放放置置在在一一個(gè)個(gè)地地方方。。因因此此AOP使得得OOP中的的重重復(fù)復(fù)代代碼碼能能夠夠大大范范圍圍減減少少。。4.3.3SpringAOPSpingAOP基于于IoC,,是對對OOP的有有益益補(bǔ)補(bǔ)充充.SpingAOP將應(yīng)應(yīng)用用系系統(tǒng)統(tǒng)分分為為兩兩部部分分,,核核心心業(yè)業(yè)務(wù)務(wù)邏邏輯輯及及橫橫向向的的通通用用邏邏輯輯,,即即方方面面(Aspect)。比比如如大大型型應(yīng)應(yīng)用用中中涉涉及及的的持持久久化化管管理理、、事事務(wù)務(wù)管管理理、、安安全全管管理理、、日日志志管管理理和和調(diào)調(diào)試試管管理理。。使用用AOP可以以將將處處理理Aspect的代代碼碼注注入入主主程程序序,,AOP可以以防防止止代代碼碼混混亂亂。?;谟赬ML的AOP配置置在Spring配置文件里,,所有的切面面和通知器都都要配置在<aop:config>標(biāo)簽里,一個(gè)個(gè)applicationContext可以包含多個(gè)個(gè)<aop:config>,一個(gè)<aop:config>可以包含pointcut、advisor、aspect元素(注意必必須是這個(gè)順順序)。4.3.3SpringAOP1.聲明一個(gè)切面面<aop:config><aop:aspectid="myAspect"ref="myBean">。。。。。</aop:aspect></aop:config><beanid="myBean"class="">。。。。。</Bean>說明:切面用用<aop:aspect>來聲明。4.3.3SpringAOP2.聲明一個(gè)切入入點(diǎn)<aop:config><aop:pointcutid="myPointcut"expression="excution(*com.service.*.*(..))"/><aop:advisorspointcut-ref="myService"advice-ref="tx-advice"/></aop:config>4.3.3SpringAOP3.聲明一個(gè)通知知<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.3SpringAOP4.4Spring配置文件<!--建立數(shù)據(jù)源--><beanid="dataSource"class="mons.dbcp.BasicDataSource"><!--數(shù)據(jù)庫驅(qū)動(dòng),,這里使用的的是Mysql數(shù)據(jù)庫--><propertyname=““driverClassName”><value>com.mysql.jdbc.Driver</value></property><!--數(shù)據(jù)庫地址,,這里也要注注意一下編碼碼!--><propertyname="url"><value>jdbc:mysql://localhost:3306/</value></property><!--數(shù)據(jù)庫的用戶戶名--><propertyname="username"><value>root</value></property><!--數(shù)據(jù)庫的密碼碼--><propertyname="password"><value>123</value></property></bean><!--把數(shù)據(jù)源注入入給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><!--把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>4.4Spring配置文件<!--把Action注入給Service--><beanid="xshBrwAct"class="hfut.glxy.action.BrwAction"><propertyname="qryxshxxService"><refbean="QryxshxxService"/></property></bean>9、靜夜四四無鄰,,荒居舊舊業(yè)貧。。。12月-2212月-22Saturday,December31,202210、雨中黃葉葉樹,燈下下白頭人。。。08:38:4908:38:4908:3812/31/20228:38:49AM11、以我獨(dú)沈沈久,愧君君相見頻。。。12月-2208:38:4908:38Dec-2231-Dec-2212、故人江海別別,幾度隔山山川。。08:38:4908:38:4908:38Saturday,December31,202213、乍見翻疑夢夢,相悲各問問年。。12月-2212月-2208:38:4908:38:49December31,202214、他他鄉(xiāng)鄉(xiāng)生生白白發(fā)發(fā),,舊舊國國見見青青山山。。。。31十十二二月月20228:38:49上上午午08:38:4912月月-2215、比不不了得得就不不比,,得不不到的的就不不要。。。。十二月月228:38上上午午12月月-2208:38December31,202216、行動(dòng)出成成果,工作作出財(cái)富。。。2022/12/318:38:4908:38:4931December202217、做做前前,,能能夠夠環(huán)環(huán)視視四四周周;;做做時(shí)時(shí),,你你只只能能或或者者最最好好沿沿著著以以腳腳為為起起點(diǎn)點(diǎn)的的射射線線向向前前。。。。8:38:49上上午午8:38上上午午08:38:4912月月-229、沒有有失敗敗,只只有暫暫時(shí)停停止成成功??!。12月月-221

溫馨提示

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

最新文檔

評論

0/150

提交評論