欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
用Spring AOP實(shí)現開(kāi)發(fā)中松散耦合-軟件頻道-Spring-天極網(wǎng)

用Spring AOP實(shí)現開(kāi)發(fā)中松散耦合

2005-12-28 09:47 作者: 陳鑫 黃迪明 陳瓊 出處: 計算機與信息技術(shù) 責任編輯:方舟
  摘要 面向方面編程(AOP)是面向對象編程(OOP)的一種擴展技術(shù),能夠很好的解決橫切關(guān)注點(diǎn)問(wèn)題以及相關(guān)的設計難題來(lái)實(shí)現松散耦合。Spring AOP 是 AOP 技術(shù)的一種實(shí)現。本文介紹了AOP 概念,然后詳細討論了如何利用Spring AOP 開(kāi)發(fā)AOP 程序,最后展望了Spring AOP 的前景。

  關(guān)鍵詞 AOP Spring AOP Java

  引言

  AOP(Aspected Oriented Programming)是一種新興的編程技術(shù)。它可以解決OOP和過(guò)程化方法不能夠很好解決的橫切(crosscut)問(wèn)題,如:事務(wù)、安全、日志等橫切關(guān)注。當未來(lái)系統變得越來(lái)越復雜,橫切關(guān)注點(diǎn)就成為一個(gè)打問(wèn)題的時(shí)候,AOP就可以很輕松的解決橫切關(guān)注點(diǎn)這個(gè)問(wèn)題,使得AOP編程成為。Spring 是基于J2EE的輕量級開(kāi)源開(kāi)發(fā)框架,其中Spring AOP組件實(shí)現了面向方面編程。

  AOP 概述

  面向方面編程 (AOP) 提供從另一個(gè)角度來(lái)考慮程序結構以完善面向對象編程(OOP)。 面向對象將應用程序分解成各個(gè)層次的對象,而AOP將程序分解成各個(gè)方面或者說(shuō)關(guān)注點(diǎn) 。這使得可以模塊化諸如事務(wù)管理等這些橫切多個(gè)對象的關(guān)注點(diǎn)。

  1、AOP 基本概念

  方面(Aspect): 一個(gè)關(guān)注點(diǎn)的模塊化,這個(gè)關(guān)注點(diǎn)實(shí)現可能另外橫切多個(gè)對象。事務(wù)管理是J2EE應用中一個(gè)很好的橫切關(guān)注點(diǎn)例子。方面用Spring的 Advisor或攔截器實(shí)現。

  連接點(diǎn)(Joinpoint): 程序執行過(guò)程中明確的點(diǎn),如方法的調 用或特定的異常被拋出。

  通知(Advice): 在特定的連接點(diǎn),AOP框架執行的動(dòng)作。各種類(lèi) 型的通知包括“around”、“before”和“throws”通知。通知類(lèi)型將在下面討論。許多AOP框架 包括Spring都是以攔截器做通知模型,維護一個(gè)“圍繞”連接點(diǎn)的攔截器鏈。

  切入點(diǎn)(Pointcut): 指定一個(gè)通知將被引發(fā)的一系列連接點(diǎn) 的集合。AOP框架必須允許開(kāi)發(fā)者指定切入點(diǎn):例如,使用正則表達式。

  引入(Introduction): 添加方法或字段到被通知的類(lèi)。 Spring允許引入新的接口到任何被通知的對象。例如,你可以使用一個(gè)引入使任何對象實(shí)現 IsModified接口,來(lái)簡(jiǎn)化緩存。

  目標對象(Target Object): 包含連接點(diǎn)的對象。也被稱(chēng)作 被通知或被代理對象。

  AOP代理(AOP Proxy): AOP框架創(chuàng )建的對象,包含通知。 在Spring中,AOP代理可以是JDK動(dòng)態(tài)代理或者CGLIB代理。

  織入(Weaving): 組裝方面來(lái)創(chuàng )建一個(gè)被通知對象。這可以在編譯時(shí) 完成(例如使用AspectJ編譯器),也可以在運行時(shí)完成。Spring和其他純Java AOP框架一樣, 在運行時(shí)完成織入。

  Spring AOP 介紹

  Spring的一個(gè)關(guān)鍵組件就是AOP框架。 Spring IoC容器(BeanFactory 和ApplicationContext)并不依賴(lài)于A(yíng)OP, 這意味著(zhù)如果你不需要使用,AOP可以不用,AOP完善了Spring IoC,使之成為一個(gè)有效的中間件解決方案。

  Spring AOP 是Spring 框架的重要組成部分,它實(shí)現了AOP聯(lián)盟約定的接口。Spring AOP 是由純Java開(kāi)發(fā)完成的。Spring AOP 只實(shí)現了方法級別的連接點(diǎn),在J2EE應用中,AOP攔截到方法級的操作已經(jīng)足夠。OOP倡導的是基于setter/getter 的方法訪(fǎng)問(wèn),而非直接訪(fǎng)問(wèn)域,而Spring 有足夠理由僅僅提供方法級的連接點(diǎn)。為了使控制反轉(IoC)很方便的使用到非常健壯、靈活的企業(yè)服務(wù),則需要Spring AOP 的實(shí)現。Spring AOP 在運行時(shí)才創(chuàng )建Advice 對象。Spring AOP的優(yōu)點(diǎn)如下:

  ·允許開(kāi)發(fā)者使用聲明式企業(yè)服務(wù),比如事務(wù)服務(wù)、安全性服務(wù)。

  ·開(kāi)發(fā)者可以開(kāi)發(fā)滿(mǎn)足業(yè)務(wù)需求的自定義方面。

  ·開(kāi)發(fā)Spring AOP Advice 很方便,可以借助代理類(lèi)快速搭建Spring AOP 應用。

  使用Spring AOP松散耦合

  1、創(chuàng )建通知

  為實(shí)現AOP,開(kāi)發(fā)者需要開(kāi)發(fā)AOP 通知(Advice)。AOP 通知(Advice) 包含了方面(Aspect)的邏輯。當創(chuàng )建一個(gè)Advice 對象的時(shí)候,你就編寫(xiě)了實(shí)現橫切(cross-cutting)功能。 Spring 的連接點(diǎn)是用方法攔截器實(shí)現的,這就意味著(zhù)你編寫(xiě)的Spring AOP 通知將在方法調用的不同點(diǎn)組入進(jìn)程序中。由于在調用一個(gè)方法時(shí)有幾個(gè)不同的時(shí)間點(diǎn),Spring 可以在不同的時(shí)間點(diǎn)組入進(jìn)程序。Spring AOP中,提供了四種通知的接口: MethodBeforeAdvice 用于在目標方法調用前觸發(fā);AfterReturningAdvice 用于在目標方法調用后觸發(fā);ThrowsAdvice 用于在目標方法拋出異常時(shí)觸發(fā);MethodInterceptor 用于實(shí)現 Around 通知(Advice),在目方法執行的前后觸發(fā)。

  如果要實(shí)現相應功能,則需要實(shí)現上述對應的接口。例如:實(shí)現Before 通知(Advice)需要實(shí)現方法 void before(Method method, Object[] args, Object target) ,實(shí)現 After 通知(Advice) 需要實(shí)現方法 void afterReturning (Method method, Object[] args, Object target)。

  2、在Spring 中定義切入點(diǎn)

  在不能明確調用方法的時(shí)候,通知就很不實(shí)用。切入點(diǎn)則可以決定特定的類(lèi),特定的方法是否匹配特定標準。如果某匹配,則通知將應用到此方法上。Spring 切入點(diǎn)允許用很靈活的方式將通知組織進(jìn)我們的類(lèi)中。Spring 中的切入點(diǎn)框架的核心是Pointcut接口,此接口允許我們定義組入通知中的類(lèi)和方法。許多方面是通過(guò)一系列的通知和切入點(diǎn)組合來(lái)定義。

  在Spring中,一個(gè)advisor就是一個(gè)方面的完整的模塊化表示。Spring提供了PointcutAdvisor接口把通知和切入點(diǎn)組合成一個(gè)對象。Spring中很多內建的切入點(diǎn)都有對應的PointcutAdvisor,這使得你可以很方便在一個(gè)地方管理切入點(diǎn)和通知。Spring中的切入點(diǎn)分為兩類(lèi):靜態(tài)和動(dòng)態(tài)。因為靜態(tài)切入點(diǎn)的性能要優(yōu)于動(dòng)態(tài)切入點(diǎn),所以?xún)?yōu)先考慮使用。Spring 為我們提供創(chuàng )建靜態(tài)切入點(diǎn)很實(shí)用的類(lèi)StaticMethodMatherPointcut。在這個(gè)類(lèi)中,我們只需要關(guān)心setMappedName和setMappedNams方法。你可以使用具體的類(lèi)名,也可以使用通配符。如:設置mappedName屬性為set* 則匹配所有的set方法。Spring還提供了另通過(guò)正則表達式來(lái)創(chuàng )建靜態(tài)切入點(diǎn)的實(shí)用類(lèi)RegexpMethodPointcut。通過(guò)使用Perl樣式的正則表達式來(lái)定義你感興趣的方法。當切入點(diǎn)需要運行時(shí)參數值來(lái)執行通知時(shí),這時(shí)就需要使用動(dòng)態(tài)切入點(diǎn)。Spring提供了一個(gè)內建的動(dòng)態(tài)切入點(diǎn):ControlFlowPointcut,此切入點(diǎn)匹配基于當前線(xiàn)程的調用堆棧。我們可以在只有在當前線(xiàn)程執行的執行時(shí)找到特定的類(lèi)和特定的方法才返回true。使用動(dòng)態(tài)切入點(diǎn)有很大的性能損耗。大多數的切入點(diǎn)可以靜態(tài)確定,我們很少有機會(huì )創(chuàng )建動(dòng)態(tài)切入點(diǎn)。為了增加可切入點(diǎn)的可重用性,Spring 提供了切入點(diǎn)上的集合操作——交集和合并。

  3、用ProxyFactoryBean創(chuàng )建AOP代理

  ProxyFactoryBean,和其他Spring的 FactoryBean實(shí)現一樣,引入一個(gè)間接的層次。如果你定義一個(gè)名字為myfactory的ProxyFactoryBean, 引用myfactory的對象所看到的不是ProxyFactoryBean 實(shí)例本身,而是由實(shí)現ProxyFactoryBean的類(lèi)的 getObject()方法所創(chuàng )建的對象。這個(gè)方法將創(chuàng )建一個(gè)包裝了目標對象 的AOP代理。使用ProxyFactoryBean或者其他IoC可知的類(lèi)來(lái)創(chuàng )建AOP代理的最重要的優(yōu)點(diǎn)之一是IoC可以管理通知和切入點(diǎn)。這是一個(gè)非常的強大的功能,能夠實(shí)現其他AOP框架很難實(shí)現的特定的方法。例如,一個(gè)通知本身可以引用應用對象(除了目標對象, 它在任何AOP框架中都可以引用應用對象),這完全得益于依賴(lài)注入所提供的可插入性。通常,我們不需要ProxyFactoryBean的全部功能,因為我們常常只對一個(gè)方面感興趣: 例如,事務(wù)管理。當我們僅僅對一個(gè)特定的方面感興趣時(shí),我們可以使用許多便利的工廠(chǎng)來(lái)創(chuàng )建AOP代理,如:TransactionProxyFactoryBean。

  4、自動(dòng)代理

  在應用較小時(shí),只有很少類(lèi)需要被通知的時(shí),ProxyFactoryBean 可以很好的工作。當有許多類(lèi)需要通知的時(shí),顯示的創(chuàng )建每個(gè)代理就顯得很繁瑣。幸運的是Spring提供了是使用自動(dòng)通過(guò)容器來(lái)創(chuàng )建代理。這時(shí),就只需要配置一個(gè)Bean來(lái)做繁瑣的工作。Spring提供了兩個(gè)類(lèi)實(shí)現自動(dòng)代理:BeanNameAutoProxyCreator和DefaultAdvisorAutoProxyCreator。BeanNameAutoProxyCreator為匹配名字的Bean產(chǎn)生代理,它可以使用在將一個(gè)或者多個(gè)方面應用在命名相似的Bean中。自動(dòng)代理框架假設代理將要暴露出什么接口。如果目標Bean沒(méi)有實(shí)現任何接口,這時(shí)就會(huì )動(dòng)態(tài)產(chǎn)生一個(gè)子類(lèi)。而更強大的自動(dòng)代理是DefaultAdvisorAutoProxyCreator,你所需要做的是在BeanFactory中包含它的配置。這個(gè)類(lèi)的奇妙之處在于他使用實(shí)現了BeanPostProcessor接口。在Bean定義被加載倒Spring容器中后,DefaultAdvisorAutoProxyCreator將搜索上下文中的Advisor,最后它將Advisor應用到匹配Advisor切入點(diǎn)的Bean中。這個(gè)代理只對Advisor起作用,它需要通過(guò)Advisor來(lái)得到需要通知的Bean。元數據自動(dòng)代理(MetaData AutoProxy)。元數據自動(dòng)代理配置依賴(lài)于源代碼屬性而不是外部XML配置文件。這可以非常方便的使源代碼和AOP元數據組織在同一個(gè)地方。元數據自動(dòng)代理最常用的地方是用來(lái)聲明事務(wù)。Spring提供了很強的框架來(lái)通過(guò)AOP框架來(lái)聲明事務(wù)。這提供了在EJB使用聲明式事務(wù)的相同功能。

  結論

  AOP 是面向對象編程的有力補充。通過(guò)方面就可以聚合在應用中行為形成可重用模塊。

  通過(guò)程序可以實(shí)現怎樣和在什么地方來(lái)調用這些行為。這可以減少代碼重復,并使你更加關(guān)注業(yè)務(wù)邏輯。Spring 提供了AOP框架來(lái)實(shí)現調用方法時(shí)加入方面。在A(yíng)OP框架中可以很方便的使用預定義的靜態(tài)切入點(diǎn)來(lái)定義被調用的類(lèi)和方法。我們需要通過(guò)Spring提供的代理類(lèi)來(lái)產(chǎn)生代理對象,可以使用ProxyFactoryBean也可以使用自動(dòng)代理。Spring AOP 的編程方式模塊化了橫向關(guān)注點(diǎn)的實(shí)現,提供了一個(gè)更好更快的軟件開(kāi)發(fā)方式。在軟件結構日益擴大,結構日益復雜的今天,Spring AOP 將會(huì )發(fā)揮越來(lái)越重要的作用。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Spring高級程序設計 6 Spring AOP 進(jìn)階
實(shí)現類(lèi)似Spring的可配置的AOP框架
【第六章】 AOP 之 6.1 AOP基礎 ——跟我學(xué)spring3
3.Spring AOP
Java輕量級業(yè)務(wù)層框架Spring兩大核心IOC和AOP原理
AspectJ 和 Spring AOP 的區別
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久