免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
spring框架學(xué)習(xí)(六)AOP
AOP(Aspect-OrientedProgramming)面向方面編程,與OOP完全不同,使用AOP編程系統(tǒng)被分為方面或關(guān)注點,而不是OOP中的對象。

 

 AOP的引入

 在OOP面向?qū)ο蟮氖褂弥校瑹o可避免的會出現(xiàn)代碼重復(fù),而且使用面向?qū)ο蟮木幊谭绞剑@種重復(fù)無法避免,比如用戶權(quán)限判斷中,根據(jù)相應(yīng)的權(quán)限執(zhí)行相應(yīng)的方法;在servlet中設(shè)置編碼格式時,同樣相同的代碼出現(xiàn)很多次,而且還根業(yè)務(wù)無關(guān),很容易忘記寫,結(jié)果運行的時候就出現(xiàn)亂碼拉。這種重復(fù)代碼不僅使編碼麻煩,而且還不容易維護(hù)。而AOP則將這些代碼整理起來,將解決某個切面問題的代碼單獨的放在某個模塊中,然后再織入到程序中。

AOP中的術(shù)語




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

       方面,類似于字符編碼功能) 

 Advice: 橫切面功能的具體實現(xiàn),需要根據(jù)實際的情況分析,如果在目標(biāo)對象操作之前是 before在操作之后,就是 after advice。

       增強(qiáng),類似于字符編碼過濾器

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

       類似于過濾器的匹配規(guī)則 /*

 Joinpoint: 連接點,或指組件加入流程的時機(jī),比如設(shè)置屬性,調(diào)用方法,等,Spring只支持方法調(diào)用的連接點,而其他的一些框架支持屬性的連接點如:AspectJ

       類似于過濾器的過濾規(guī)則 REQUEST,FORWARD

 Weave: 縫合,將組件應(yīng)用到業(yè)務(wù)流程中的這個過程,叫縫合或織入。

       類似于將過濾器配置到web.xml文件的過程

 Proxy,代理,在實現(xiàn)上,SpringAOP其實就是使用JDK的動態(tài)代理(使用接口的方式完成代理操作),也可以使用CGLIB(使用繼承的方式完成代理操作)。

 Target目標(biāo),業(yè)務(wù)操作的實際對象

 

 

實例:設(shè)置字符編碼格式看作是一個Aspect方面,而攔截器就是一個Advice增強(qiáng)。

  1. <span style="font-size:18px;"><!-- 字符編碼過濾器-->  
  2. <filter>  
  3. <filter-name>characterFilter</filter-name>  
  4. <filter-class>com.bjpowernode.egov.filter.CharacterEncodingFilter</filter-class>  
  5. </filter>  
  6. <filter-mapping>  
  7. <filter-name>characterFilter</filter-name>  
  8. <url-pattern>/servlet/*</url-pattern>  
  9. </filter-mapping>  
  10.  </span>  

過濾器

 

  1. <span style="font-size:18px;">public class CharacterEncodingFilter implements Filter {  
  2.    
  3.    @Override  
  4.    public void destroy() {}  
  5.    
  6.    @Override  
  7.    public void doFilter(ServletRequest request, ServletResponse response,  
  8.       FilterChainchain) throws IOException, ServletException {  
  9.            request.setCharacterEncoding("GB18030");  
  10.            chain.doFilter(request,response);  
  11.    }  
  12.    
  13.    @Override  
  14.    publicvoid init(FilterConfig filterConfig) throws ServletException {}  
  15. }</span>  


這樣就不用在每個servlet中設(shè)置編碼拉。。

 

spring框架中AOP的使用

1,拷貝jar



 

2,spring配置文件中增加命名空間和約束文件

啟用aop功能:就把標(biāo)簽添加進(jìn)來就可以拉。

 


 

3,寫被代理的類和擴(kuò)展類

 


 


4,由配置文件聲明

  1. <span style="font-size:18px;"><!--聲明目標(biāo)類-->  
  2. <bean id="targetclass" class="com.spring.aop.TargetClass"></bean>  
  3.   
  4. <!--聲明擴(kuò)展類-->  
  5. <bean id="extendsclass" class="com.spring.aop.extendsClass"></bean>  
  6.   
  7.   
  8. <!--織入擴(kuò)展類,并聲明在哪個方法上執(zhí)行擴(kuò)展類-->  
  9. <aop:config>  
  10.     <aop:aspect id="extendAspect" ref="">  
  11.         <aop:pointcut expression="execution(public ** (..))" id="extendsPoincat">  
  12.         <!--在目標(biāo)方法執(zhí)行前執(zhí)行的方法-->  
  13.         <aop:before method="beforemethod" pointcut-ref="extendsPoincat" />  
  14.         <!--在目標(biāo)方法執(zhí)行后執(zhí)行的方法-->  
  15.         <aop:after method="aftermethod" pointcut-ref="extendsPoincat" />  
  16.     </aop:aspect>  
  17. </aop:config></span>  



 

5,測試

 成功的話,執(zhí)行目標(biāo)類中的目標(biāo)方法targetmethod()時,會先執(zhí)行擴(kuò)展類中的beforemethod()方法,再執(zhí)行目標(biāo)方法,最后再執(zhí)行aftermethod()方法。
 也就是我們只需要手動調(diào)用targetmethod方法,擴(kuò)展類中的兩個方法框架會在執(zhí)行的時候通過讀取配置文件,獲取相應(yīng)信息,自動給我們添加上擴(kuò)展的方法。。
 測試肯定成功,不相信的話,可以自己試試。

 

Spring框架中使用AOP的優(yōu)點

   AopspringIOC容器整合,增強(qiáng),切入點都是javabean,可以在同一文件中配置

 和spring的其他部分一樣,可以在不同應(yīng)用服務(wù)器之間任意移植

   spring實現(xiàn)Aop的攔截接口,使得用戶不必綁定在特定的攔截器接口上

 

 aop面向切面的編程思想,打破面向?qū)ο蟮乃季S方式,我們要學(xué)習(xí)的不僅是aop的使用,更要學(xué)習(xí)面向切面的這種思想。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
理解基于Acegi的權(quán)限控制系統(tǒng)(圖)
Spring框架和Acegi安全框架介紹
細(xì)說OpenSessionInView問題
spring框架--總述
Spring Cloud Gateway一次請求調(diào)用源碼解析
spring框架之面向切面(Spring Aop)、攔截器、過濾器的區(qū)別
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服