




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
講使用SpringAOP第10東華大學計算機學院丁祥武二0一0年十月的講使用SpringAOP第10東華大學計算機學院丁祥武二02本講內容從企業應用的思考如何應對挑戰常用設計模式與動態代理面向方面編程(AOP)Spring2.x對AOP的支持2本講內容從企業應用的思考23從企業應用的思考企業應用開發面臨的挑戰企業應用的開發是相當復雜的,這種復雜除了表現在技術方面外,還表現在行業本身。企業級應用的開發往往需要面對更多的問題
—大量的并發訪問
—復雜的環境
—網絡的不穩定
—還有外部的Crack行為等因此企業級應用必須提供更好的多線程的支持,具備良好的適應性及良好的安全性等。
3從企業應用的思考企業應用開發面臨的挑戰34從企業應用的思考思考的方面可擴展性、可伸縮性一個積極的軟件開發者應該正確對待需求的變更。需求的變更表明有市場前景,只有有變化的產品才是有市場的產品。優秀的企業級應用必須具備良好的可擴展性和可伸縮性。因為良好的可擴展性允許系統動態增加新功能,而不會影響原有的功能。良好的可擴展性建立在高度的解耦之上。在JEE應用中,大多采用XML文件作為配置文件。使用XML配置文件可以避免修改代碼,從而能極好地提高程序的解耦。
4從企業應用的思考思考的方面45從企業應用的思考思考的方面快捷、可控的開發如果沒有時間限制,任何一個軟件系統在理論上都是可實現的。但這樣的條件不存在,軟件系統必須要及時投放市場。對于企業級應用,時間的限制則更加嚴格。企業的信息是瞬息萬變的,與之對應的系統必須能與時俱進。因而采用新技術的問題,樂于與風險。因此快捷、可控是企業信息化系統必須面對的挑戰。5從企業應用的思考思考的方面56從企業應用的思考思考的方面穩定性、高效性企業級應用的一個顯著特點:并發訪問量大,訪問頻繁。因此穩定性、高效性是企業級信息化系統必須達到的要求。企業級應用必須有優秀的性能,如采用緩沖池的技術——保存那些創建開銷大的對象(典型的應用是數據連接池)、數據緩存。6從企業應用的思考思考的方面67從企業應用的思考思考的方面花費最小化,利益最大化—永恒的話題任何一個商業組織都希望盡可能地降低開銷。對開發者而言,降低開銷主要是如何使在開發上的投資更有保值效果。即開發的軟件系統具有很好的復用性。在良好的JEE架構設計中,復用是一個永恒的追求目標。架構設計師希望系統中大部分的組件可以復用,甚至能讓系統的整個層可以復用。對于采用DAO模式的系統架構,如果數據庫不發生大的改變,整個DAO層都不需要變化。7從企業應用的思考思考的方面78本講內容從企業應用的思考如何應對挑戰常用設計模式與動態代理面向方面編程(AOP)Spring2.x對AOP的支持8本講內容從企業應用的思考89從企業應用的思考如何應對挑戰使用建模工具建模工具不一定是ROSE等,可以是簡單的手畫草圖。當然,借助于專業的建模工具可以更好地確定系統模型。任何語言的描述都是很空洞,而且具有很大的歧義性。使用圖形則更加直觀,而且意義更加明確。關于建模工具,推薦采用統一建模語言:UML。但UML的使用也需要掌握分寸。在軟件開發人員內部使用時,盡可能使用規范的UML;但用于與行業專家溝通時,要輔助文字說明。9從企業應用的思考如何應對挑戰910從企業應用的思考如何應對挑戰利用優秀的框架使用框架可以大大提高系統的開發效率。除非開發一個非常小的系統,而且是開發后無須修改的系統,才可以完全拋棄框架。好處:1.提高生產效率2.具有更穩定、更優秀的性能如果不使用已有的框架,系統開發者將面臨著需要自己完成所有的底層部分。除非開發者絲毫不遵守軟件復用的原則,總是重復書寫相同代碼。3.更好的保值性10從企業應用的思考如何應對挑戰1011從企業應用的思考如何應對挑戰選擇性地擴展軟件的需求千變萬化,任何框架不可能總是那么完美,難免需要擴展現有的框架。對已有的框架進行擴展,則可最大限度地利用已有的框架,但是不要盲目擴展現有框架,因為新增的部分有時會引入新的風險。盡量利用已有組件,除非無法使用已有框架時,才考慮選擇性地擴展。11從企業應用的思考如何應對挑戰1112從企業應用的思考如何應對挑戰使用代碼生成器使用代碼生成器可以自動生成部分程序。12從企業應用的思考如何應對挑戰1213本講內容從企業應用的思考如何應對挑戰常用設計模式與動態代理面向方面編程(AOP)Spring2.x對AOP的支持13本講內容從企業應用的思考1314從企業應用的思考常用的設計模式及應用單態模式的使用在任何不需要重復生成Java實例的場景中,都應該考慮使用單態模式。使用單態模式可以保證系統無須生成多個Java實例,從而減少內存占用率,也降低JVM(Java虛擬機)進行垃圾回收的開銷。單態模式通常有如下兩個使用場景:
1.工廠模式中的工廠(工廠不要重復生產產品)。2.使用服務定位器模式時的服務定位器(盡量找)。14從企業應用的思考常用的設計模式及應用1415從企業應用的思考常用的設計模式及應用代理模式的使用傳統的代理模式主要用于用簡單對象來代替復雜的對象,如果創建一個對象所需的時間比較長,且計算資源相當昂貴,可以采用一個相對簡單的對象來代替它。代理模式可將創建過程推遲到真正需要該對象時完成,一旦整個對象創建成功,對代理的方法調用將變成對實際對象的方法調用。15從企業應用的思考常用的設計模式及應用1516從企業應用的思考常用的設計模式及應用代理模式的使用JavaEE中的代理模式通常是采用功能更強大的對象來代替目標對象。例如,對于普通的業務邏輯組件,其方法都應該有事務性,但這種開始事務和結束事務都是通用步驟。因此原始業務邏輯對象的方法可以無須事務操作,而是由系統生成動態代理,調用實際的目標方法并負責事務操作。16從企業應用的思考常用的設計模式及應用1617從企業應用的思考對象由工廠產生。工廠作為代理處理器,對產生的對象增加事務處理代碼或安全處理代碼。主要是對對象中的方法增加事務處理代碼。可以在處理器中硬編碼,對方法增加代碼。通用的代理處理器,該處理器并不需要與任何特定的目標對象耦合。為了該代理處理器有更好的適應性,系統可以將需要增加事務操作的方法以XML文件配置,而該代理處理器負責解析XML文檔,根據配置決定對哪個方法增加事務處理。17從企業應用的思考對象由工廠產生。1718從企業應用的思考動態代理在運行時,能夠動態實現指定接口的機制,從而生成新的類。動態代理是JDK1.3引入的。開發者需要借助于java.lang.reflect.Proxy類來啟用代理。為某對象創建代理后,所有對被代理對象的請求都經過代理的處理,即代理攔截了客戶的請求。為創建動態代理,開發者需要借助Proxy提供的newProxyInstance()方法,并將定義代理類的類裝載器、代理實現的接口集合、InvocationHandle傳入這一靜態方法。18從企業應用的思考動態代理1819本講內容從企業應用的思考如何應對挑戰常用設計模式與動態代理面向方面編程(AOP)Spring2.x對AOP的支持19本講內容從企業應用的思考1920AOP概述AOP(AspectOrientedProgramming)的背景知識為滿足整個企業應用某方面的需求,開發者(架構師)需要整理出系統的關注點,如下圖形象地描述了關注點。20AOP概述AOP(AspectOrientedPro2021比如:事務管理、安全性管理、應用的業務邏輯都是應用需要重點解決的問題。被作為關注點看待。整個系統由大量的關注點構成。21比如:2122AOP概述關注點分類大體而言,關注點分為兩類:核心關注點主要關注系統的業務邏輯;橫切關注點主要關注系統級的服務,供業務邏輯使用。關注點核心關注點橫切關注點22AOP概述關注點分類關注點核心關注點橫切關注點2223AOP概述現實狀態業務邏輯中,到處都涉及橫切關注點。因此對各個已經實現的模塊(業務邏輯)而言,都有大量的橫切關注點實現。新的方案業務邏輯用OO技術實現;橫切關注點用AOP技術實現;橫切關注點是系統級服務,對大部分應用是常見的,容易抽象出來,并加以實現。23AOP概述現實狀態2324AOP概述實現AOP的總體模式OO技術將應用中的核心關注點分解成由層次(繼承)結構組成的領域對象集合。AOP將應用中的橫切關注點分解成由切面(Aspect)組成的生態子系統。它們被分別實現,互為補充,使得應用的開發變得簡單、可維護性得到增強。24AOP概述實現AOP的總體模式2425AOP概述實現AOP的總體模式為實現單個橫切關注點,開發者需要采用若干切面滿足它。比如為實現安全性控制橫切關注點,開發者需要提供用戶論證切面、用戶授權切面。25AOP概述實現AOP的總體模式2526AOP的基本概念各種AOP實現切面的技術、框架、機制、手段可能不同,但是AOP技術的基本概念是相同的。包括以下7個術語:連接點(joinpoint)切入點(cutpoint)裝備(advice)引入(introduction)目標對象(targetobject)織入(weaving)和切面(Aspect)。26AOP的基本概念各種AOP實現切面的技術、框架、機制、手2627AOP的基本概念連接點(Joinpoint)連接點指應用(目標對象)執行的某個點,如執行到某個方法、訪問到某個成員變量、拋出某異常、裝載某個類。通常用連接點的強弱來衡量AOP實現的強弱。Aspect5實現的連接點類型非常多,SpringAOP僅支持方法級連接點。27AOP的基本概念連接點(Joinpoint)2728AOP概念切入點(pointcut)通過切入點能夠聲明、集結連接點。通常裝備與切入點關聯在一起,一旦某連接點被觸發,則會立即執行相應的裝備。開發者借助于pointcut表達語言來完成pointcut的指定工作。28AOP概念切入點(pointcut)2829AOP概念裝備(Advice)裝備指切面(aspect)在特定連接點所采取的動作。特定連接點由切入點(pointcut)指定。主要的裝備類型包括:Before、AfterReturning、AfterThrowing、After、Around。Before裝備能夠在特定連接點被觸發前執行,如方法執行前執行的裝備。其它類似。29AOP概念裝備(Advice)2930AOP概念引入(introducion)引入也稱為inter-type聲明(AspectJ5)。將新的接口、方法、成員變量動態引入到目標類、接口或切面中。目標對象(targetObject)被若干切面(aspect)裝配過的對象,也被稱為被裝備的對象。30AOP概念引入(introducion)3031AOP概念織入(weaving)將切面(Aspect)與目標對象組裝在一起的過程稱為織入。通過織入創建一個被裝備的對象。織入時機有編譯期、裝載期、運行期。不同的AOP實現支持不同織入時機。如SpringAOP支持運行期織入;AspectJ5支持編譯期和類裝載期(Load-Time)織入。31AOP概念織入(weaving)3132AOP概念切面(aspect)與OOP中對象的概念一樣,是AOP中的核心概念。切面將pointcut、裝備、引入、目標對象等信息集結在一起,從而定義相應的織入規則,這樣一個整體稱為切面(aspect)。32AOP概念切面(aspect)3233Spring對AOP的支持AOP是一種流行的編程模型;AOP的編程思想與OOP不同,是對OOP的一種強有力的補充;通過AOP,能更好地實現模塊化結構,或者能動態地為系統增加新功能而不影響原系統的結構.33Spring對AOP的支持AOP是一種流行的編程模型;3334SpringAOP概述AOP允許開發者動態地修改OOP定義的靜態模型,即不用修改原來的OO模型,甚至可以不修改OO代碼本身,即可完成對橫切面問題的解決。比如,將系統中處理日志、安全性、事務及其他企業級服務集中放置在一個地方。因此AOP使得OOP中的重復代碼能夠大范圍減少。34SpringAOP概述3435Spring框架介紹Spring就是一個實現了AOP功能的IOC容器Spring2.0內核(IoC容器)SpringAOPSpringDAOSpringORMSpringWebSpringWebMVCSpringContextSpring框架包含的7個主要模塊35Spring框架介紹Spring就是一個實現了AOP功能3536SpringAOPSpingAOP基于IoC,是對OOP的有益補充.SpingAOP將應用系統分為兩部分,核心業務邏輯及橫向的通用邏輯,即方面(Aspect)。比如大型應用中涉及的持久化管理、事務管理、安全管理、日志管理和調試管理。使用AOP可以將處理Aspect的代碼注入主程序,AOP可以防止代碼混亂。36SpringAOPSpingAOP基于IoC,是對3637Spring對AOP的支持Spring的AOP模塊實現了AOP聯盟定義的AOP接口的實現;利用Spring提供的AOP,可以簡化代碼邏輯,分離應用程序的關注點;Spring提供的許多低層服務(如對聲明式事務的管理的支持)是基于AOP實現的;與其它AOP框架不同,Spring的思想仍然建立在IoC之上,即AOP本身也是以Bean的方式在Spring的IoC容器中裝配起來的。37Spring對AOP的支持Spring的AOP模塊實現了3738Spring的設計思想Spring的設計思想工廠模式和更好的singleton(單例)解決方案使用工廠模式創建對象比用new更加容易,因為工廠向客戶端隱藏了創建對象的復雜細節;可以使用Spring提供的工廠類,也可以自己編寫工廠類并納入容器統一管理。單一實例的對象,其生命周期貫穿整個應用程序。如采用singleton模式,必須為每個單實例實現復雜的singleton模式;Spring實現了更容易的管理方法,將單實例納入Spring的IoC容器,由IoC容器保證對象的單實例38Spring的設計思想Spring的設計思想3839SpringAOP的基本概念Spring使用動態代理實現AOP技術。39SpringAOP的基本概念Spring使用動態代理實39實例—HibernateDaoSupport類DAO(如UserDAO)通常繼承HibernateDaoSupport類這樣的DAO具有Spring封裝Hibernate操作數據庫的完全功能(自動生成基本CURD操作的代碼)。繼承的目的是讓Spring管理事務并且使DAO具有面向接口編程的特點而且在Spring的管理下,數據庫連接的打開和關閉,事務的處理也都變成自動化了。40實例—HibernateDaoSupport類DAO(如Us40實例—HibernateDaoSupport類HibernateDaoSupport提供了基于AOP的自動事務處理,程序員完全可以不用理會事務的開始與提交。在使用JDBC的一個Connection對象中使用一個事務時,在Hibernate中對應的事務要關聯一個SessionFactory。然而這個SessionFactory卻沒有在DAO中體現。41實例—HibernateDaoSupport類Hibern41實例—HibernateDaoSupport類原因是HibernateDaoSupport類做了封裝,它用一個setSessionFactory方法將SessionFactory進行注入。42實例—HibernateDaoSupport類原因是Hibe42實例—HibernateDaoSupport類所以繼承自HibernateDaoSupport類的DAO都會具有SessionFactory的屬性,從而可以通過SessionFactory創建Session實例操作數據庫。43實例—HibernateDaoSupport類4343實例—HibernateDaoSupport類雖然有set方法,但在哪注入的呢?當然是IoC容器根據applicationContext.xml注入。…….
<beanid="userDAO"class="com.dao.impl.UserDAOImpl"><propertyname="sessionFactory"><reflocal="sessionFactory"/></property></bean>44實例—HibernateDaoSupport類雖然有set方44實例—HibernateDaoSupport類IoC容器自動將創建的DAO注入了sessionFactory的對象,所以DAO對象就具有了通過Hibernate操作數據庫的功能。45實例—HibernateDaoSupport類IoC容器自動45實例—HibernateDaoSupport類另外,要使用hibernate的模板必須繼承HibernateDaoSupport這個類。46實例—HibernateDaoSupport類另外,要使用h46結束語
終實驗報告格式47結束語終474748AOP概念裝備的類型Before裝備即在執行目標操作(如調用某方法、讀取或設置變量取值)之前執行的裝備。48AOP概念裝備的類型4849AOP概念實例在某項目中提供了test.DisPersonInfo1.java類,暴露了兩個compute()方法。49AOP概念實例4950publicclassDisPersonInfo1{privatestaticfinalLoglog=LogFactory.getLog(DisPersonInfo1.class);publicstaticvoidcompute(Stringperson){
log.info(person);}publicstaticvoidcompute(Stringperson,intage){
log.info(person+"已經"+age+"歲了!");}}50publicclassDisPersonInfo15051publicclassMainTest{privatestaticfinalLoglog=LogFactory.getLog(MainTest.class);publicstaticvoidmain(String[]args){
log.info("MainTestmain()………");DisPersonInfo1.compute("Picart");DisPersonInfo1.compute("Picart",30);}}
51publicclassMainTest{51522008-10-2022:01:43MainTestmain信息:MainTestmain()………2008-10-2022:01:43DisPersonInfo1compute信息:Picart2008-10-2022:01:43DisPersonInfo1compute信息:Picart已經30歲了!522008-10-2022:01:43MainTest5253//一個AspectJ5切面實現AspectJAop.aj(可以是.java)publicaspectAspectJAop{privatestaticfinalLoglog=LogFactory.getLog(AspectJAop.class);pointcutxx():execution(*DisPersonIpute(..));before:xx(){(“AspectJAop@Before”);}}53//一個AspectJ5切面實現AspectJAop.5354關于該切面實現AspectJ5的切入點pointcut也是bean對象。通過pointcut關鍵字定義了名為xx()的pointcut;xx()pointcut通過關鍵字execution集結了相應的連接點(joinpoint),即執行Di
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家具廠質量管理制度
- 應急處置室管理制度
- 強電室安全管理制度
- 律師兩結合管理制度
- 微生物培訓管理制度
- 心電圖質量管理制度
- 急診科被褥管理制度
- 總承包投資管理制度
- 患標本安全管理制度
- 成品倉收貨管理制度
- 福建省福州市2023?2024學年高一下冊期末考數學試卷附解析
- 2025年宜賓市英語七下期末復習檢測試題含答案
- 項目管理從立項到結項全解析
- 全國導游人員資格考試單科綜合測試卷(科目一:政策與法律法規)
- 2024年中國鐵路成都局集團有限公司招聘考試《鐵路基本常識》真題庫及答案
- 中醫診斷學考點總結
- 生態草場使用權轉讓協議
- 第18課清朝的邊疆治理教學設計-統編版七年級歷史下冊
- 物流實操試題及答案詳解
- 播出設備檢修管理制度
- 提高斜拉索梁端錨固鋼套管軸線定位精度
評論
0/150
提交評論