亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用SpringAOP實現開發中松散耦合

2019-11-18 13:47:11
字體:
來源:轉載
供稿:網友
引言

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

  AOP 概述

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

  1、AOP 基本概念

  方面(Aspect): 一個關注點的模塊化,這個關注點實現可能另外橫切多個對象。事務治理是J2EE應用中一個很好的橫切關注點例子。方面用Spring的 Advisor或攔截器實現。

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

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

  切入點(Pointcut): 指定一個通知將被引發的一系列連接點 的集合。AOP框架必須答應開發者指定切入點:例如,使用正則表達式。

  引入(IntrodUCtion): 添加方法或字段到被通知的類。 Spring答應引入新的接口到任何被通知的對象。例如,你可以使用一個引入使任何對象實現 IsModified接口,來簡化緩存。

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

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

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

  Spring AOP 介紹

  Spring的一個要害組件就是AOP框架。 Spring IoC容器(BeanFactory 和applicationContext)并不依靠于AOP, 這意味著假如你不需要使用,AOP可以不用,AOP完善了Spring IoC,使之成為一個有效的中間件解決方案。

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

  ?答應開發者使用聲明式企業服務,比如事務服務、安全性服務。

  ?開發者可以開發滿足業務需求的自定義方面。

  ?開發Spring AOP Advice 很方便,可以借助代理類快速搭建Spring AOP 應用。

  使用Spring AOP松散耦合

  1、創建通知

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

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

  2、在Spring 中定義切入點

  在不能明確調用方法的時候,通知就很不實用。切入點則可以決定特定的類,特定的方法是否匹配特定標準。假如某匹配,則通知將應用到此方法上。Spring 切入點答應用很靈活的方式將通知組織進我們的類中。Spring 中的切入點框架的核心是Pointcut接口,此接口答應我們定義組入通知中的類和方法。許多方面是通過一系列的通知和切入點組合來定義。

  在Spring中,一個advisor就是一個方面的完整的模塊化表示。Spring提供了PointcutAdvisor接口把通知和切入點組合成一個對象。Spring中很多內建的切入點都有對應的PointcutAdvisor,這使得你可以很方便在一個地方治理切入點和通知。Spring中的切入點分為兩類:靜態和動態。因為靜態切入點的性能要優于動態切入點,所以優先考慮使用。Spring 為我們提供創建靜態切入點很實用的類StaticMethodMatherPointcut。在這個類中,我們只需要關心setMappedName和setMappedNams方法。你可以使用具體的類名,也可以使用通配符。如:設置mappedName屬性為set* 則匹配所有的set方法。Spring還提供了另通過正則表達式來創建靜態切入點的實用類RegeXPMethodPointcut。通過使用Perl樣式的正則表達式來定義你感愛好的方法。當切入點需要運行時參數值來執行通知時,這時就需要使用動態切入點。Spring提供了一個內建的動態切入點:ControlFlowPointcut,此切入點匹配基于當前線程的調用堆棧。我們可以在只有在當前線程執行的執行時找到特定的類和特定的方法才返回true。使用動態切入點有很大的性能損耗。大多數的切入點可以靜態確定,我們很少有機會創建動態切入點。為了增加可切入點的可重用性,Spring 提供了切入點上的集合操作――交集和合并。

  3、用ProxyFactoryBean創建AOP代理

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

  4、自動代理

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

  結論

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

  通過程序可以實現怎樣和在什么地方來調用這些行為。這可以減少代碼重復,并使你更加關注業務邏輯。Spring 提供了AOP框架來實現調用方法時加入方面。在AOP框架中可以很方便的使用預定義的靜態切入點來定義被調用的類和方法。我們需要通過Spring提供的代理類來產生代理對象,可以使用ProxyFactoryBean也可以使用自動代理。Spring AOP 的編程方式模塊化了橫向關注點的實現,提供了一個更好更快的軟件開發方式。在軟件結構日益擴大,結構日益復雜的今天,Spring AOP 將會發揮越來越重要的作用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线视频在线播放完整版免费观看| 亚洲人成电影在线播放| 国产亚洲精品美女久久久| 日本精品va在线观看| 久久av中文字幕| 96pao国产成视频永久免费| 97人人模人人爽人人喊中文字| 精品一区精品二区| 国产美女被下药99| 91天堂在线观看| 国a精品视频大全| 亚洲最大福利视频网| 亚洲成人教育av| 欧美激情第99页| 欧美成人免费全部| 成人久久一区二区三区| 欧美最顶级丰满的aⅴ艳星| 国产精品一区=区| 亚洲精品99久久久久| 国产偷亚洲偷欧美偷精品| 国产日韩在线视频| 青青草99啪国产免费| 在线观看日韩www视频免费| 国产精品久久久久秋霞鲁丝| 久久精品国产电影| 日韩人体视频一二区| 亚洲男人的天堂网站| 亚洲福利视频网| 午夜精品久久久久久久99热| 欧美激情啊啊啊| 7777免费精品视频| 欧美大片va欧美在线播放| 久久久久久久久久久久av| 亚洲已满18点击进入在线看片| 亚洲精品电影网站| 亚洲视频在线观看视频| 伊人精品在线观看| 亚洲日韩欧美视频| 美女精品视频一区| 91精品国产乱码久久久久久久久| 久久国产精品影片| 亚洲午夜未满十八勿入免费观看全集| 欧美日韩一区二区三区| 美女福利精品视频| 欧美麻豆久久久久久中文| 久久香蕉频线观| 亚洲午夜色婷婷在线| 久热精品视频在线免费观看| 在线看片第一页欧美| 91久久久国产精品| 欧美网站在线观看| 国产精品网站大全| 成人激情免费在线| 亚洲欧洲日产国产网站| 欧美性xxxx| 亚洲一区二区三区sesese| 亚洲经典中文字幕| 日韩成人网免费视频| 奇米4444一区二区三区| 91视频国产精品| 欧美性生交大片免网| 97在线免费视频| 欧美一区二区大胆人体摄影专业网站| 国产精品久久久久久久9999| 国产精品久久久久高潮| 福利一区视频在线观看| 国产精品免费看久久久香蕉| 久久免费视频在线观看| 中文字幕日韩欧美在线视频| 国产精品色悠悠| 亚洲国产精品va在线看黑人动漫| 久久影院资源网| 91精品国产综合久久香蕉的用户体验| 欧美成人在线影院| 国产免费成人av| 日本精品一区二区三区在线播放视频| 久久最新资源网| 欧美成人免费全部| 国产日韩欧美91| 国产成人免费av| 久热在线中文字幕色999舞| 亚洲欧美中文字幕在线一区| 色综合久久88| 久久亚洲精品国产亚洲老地址| 中文字幕欧美日韩va免费视频| 国产噜噜噜噜噜久久久久久久久| 亚洲自拍小视频| 深夜精品寂寞黄网站在线观看| 亚洲va欧美va国产综合久久| 午夜精品一区二区三区在线视| 色香阁99久久精品久久久| 亚洲jizzjizz日本少妇| 亚洲天堂一区二区三区| yw.139尤物在线精品视频| 色综合91久久精品中文字幕| 黑人巨大精品欧美一区二区| 亚洲第一网站免费视频| 精品在线小视频| 欧美日韩精品在线视频| 欧美香蕉大胸在线视频观看| 久久精品99国产精品酒店日本| 97香蕉久久超级碰碰高清版| 久久中文字幕一区| 国产精品久久久久久av福利软件| 欧美日本高清一区| 大胆人体色综合| 久久久亚洲福利精品午夜| 国产精品网红福利| 亚洲精品一区二区三区不| 欧美日韩亚洲天堂| 精品一区二区三区四区在线| 亚洲第一精品夜夜躁人人躁| 亚洲大胆人体在线| 欧美性少妇18aaaa视频| 亚洲春色另类小说| 日韩一区二区欧美| 国产精品人人做人人爽| 日韩精品极品毛片系列视频| 成人av.网址在线网站| 亚洲天堂视频在线观看| 91免费在线视频| 日韩中文字幕网站| 国产综合在线观看视频| 日韩美女av在线免费观看| 午夜欧美不卡精品aaaaa| 日韩精品在线第一页| www.xxxx欧美| 成人黄色免费片| 一个色综合导航| 色悠久久久久综合先锋影音下载| 国产亚洲日本欧美韩国| 精品中文视频在线| 国产极品精品在线观看| 国产成人精品久久亚洲高清不卡| 国产成人精品一区二区三区| 日韩中文字幕亚洲| 国产精品成人在线| 日韩欧美亚洲一二三区| 久久久久久久网站| 欧美激情视频一区| 亚洲欧美日韩中文视频| 96国产粉嫩美女| 亚洲乱亚洲乱妇无码| 韩国国内大量揄拍精品视频| 精品调教chinesegay| 日韩在线一区二区三区免费视频| 久久国产精品视频| 久久视频在线视频| 日韩精品在线免费观看视频| 亚洲欧美制服丝袜| 亚洲高清av在线| 精品爽片免费看久久| 欧美裸体xxxx| 国产婷婷色综合av蜜臀av| 精品视频久久久久久| 免费91麻豆精品国产自产在线观看| 国产精品流白浆视频| 国产欧美日韩最新| 超薄丝袜一区二区| 国产亚洲欧美视频| 国产一区玩具在线观看| 国产精品视频最多的网站| 日韩av资源在线播放| 亚洲精品一区av在线播放|