spring架構學習(六)AOP

來源:互聯網
上載者:User

  AOP(Aspect-OrientedProgramming)面向方面編程,與OOP完全不同,使用AOP編程系統被分為方面或關注點,而不是OOP中的對象。

   AOP的引入

 在OOP物件導向的使用中,無可避免的會出現代碼重複,而且使用物件導向的編程方式,這種重複無法避免,比如使用者權限判斷中,根據相應的許可權執行相應的方法;在servlet中設定編碼格式時,同樣相同的代碼出現很多次,而且還根業務無關,很容易忘記寫,結果啟動並執行時候就出現亂碼拉。這種重複代碼不僅使編碼麻煩,而且還不容易維護。而AOP則將這些代碼整理起來,將解決某個切面問題的代碼單獨的放在某個模組中,然後再織入到程式中。 AOP中的術語




  Aspect:橫切面的功能, 抽象出類,或介面, AOP編程重要的就是識別出橫切面功能。

       (方面,類似於字元編碼功能) 

 Advice: 橫切面功能的具體實現,需要根據實際的情況分析,如果在目標對象操作之前是 before在操作之後,就是 after advice。

       (增強,類似於字元編碼過濾器)

 Pointcut:切入點,描述橫切面功能應用的限制,不是所有的流程都需要,那些可以使用的地方就是切入點

       (類似於過濾器的匹配規則 /*)

 Joinpoint: 連接點,或指組件加入流程的時機,比如設定屬性,調用方法,等,Spring只支援方法調用的連接點,而其他的一些架構支援屬性的連接點如:AspectJ,

       (類似於過濾器的過濾規則 REQUEST,FORWARD)

 Weave: 縫合,將組件應用到商務程序中的這個過程,叫縫合或織入。

       (類似於將過濾器配置到web.xml檔案的過程)

 Proxy,代理,在實現上,Spring的AOP其實就是使用JDK的動態代理(使用介面的方式完成代理操作),也可以使用CGLIB(使用繼承的方式完成代理操作)。

 Target,目標,業務操作的實際對象

 

 

執行個體:設定字元編碼格式看作是一個Aspect方面,而攔截器就是一個Advice增強。

<!-- 字元編碼過濾器--><filter><filter-name>characterFilter</filter-name><filter-class>com.bjpowernode.egov.filter.CharacterEncodingFilter</filter-class></filter><filter-mapping><filter-name>characterFilter</filter-name><url-pattern>/servlet/*</url-pattern></filter-mapping> 

過濾器類

 

public class CharacterEncodingFilter implements Filter {    @Override   public void destroy() {}    @Override   public void doFilter(ServletRequest request, ServletResponse response,      FilterChainchain) throws IOException, ServletException {           request.setCharacterEncoding("GB18030");           chain.doFilter(request,response);   }    @Override   publicvoid init(FilterConfig filterConfig) throws ServletException {}}


這樣就不用在每個servlet中設定編碼拉。。

  spring架構中AOP的使用 1,拷貝jar包


  2,spring設定檔中增加命名空間和約束檔案

啟用aop功能:就把標籤添加進來就可以拉。

 


  3,寫被代理的類和擴充類

 


 


4,由設定檔聲明

<!--聲明目標類--><bean id="targetclass" class="com.spring.aop.TargetClass"></bean><!--聲明擴充類--><bean id="extendsclass" class="com.spring.aop.extendsClass"></bean><!--織入擴充類,並聲明在哪個方法上執行擴充類--><aop:config><aop:aspect id="extendAspect" ref=""><aop:pointcut expression="execution(public ** (..))" id="extendsPoincat"><!--在目標方法執行前執行的方法--><aop:before method="beforemethod" pointcut-ref="extendsPoincat" /><!--在目標方法執行後執行的方法--><aop:after method="aftermethod" pointcut-ref="extendsPoincat" /></aop:aspect></aop:config>



  5,測試  成功的話,執行目標類中的目標方法targetmethod()時,會先執行擴充類中的beforemethod()方法,再執行目標方法,最後再執行aftermethod()方法。  也就是我們只需要手動調用targetmethod方法,擴充類中的兩個方法架構會在執行的時候通過讀取設定檔,擷取相應資訊,自動給我們添加上擴充的方法。。  測試肯定成功,不相信的話,可以自己試試。

  Spring架構中使用AOP的優點

   Aop與spring的IOC容器整合,增強,切入點都是javabean,可以在同一檔案中配置

 和spring的其他部分一樣,可以在不同應用伺服器之間任意移植

   spring實現Aop的攔截介面,使得使用者不必綁定在特定的攔截器介面上

 

 aop面向切面的編程思想,打破物件導向的思維方式,我們要學習的不僅是aop的使用,更要學習面向切面的這種思想。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.