国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

spring的AOP機制

explorer_ddf / 425人閱讀

摘要:術語定義通知切面有必須要完成的工作,在中,切面的工作被稱為通知。的支持提供了的四種支持,分別是基于代理的經典模式純切面注解驅動的切面注入式切面。

前言

在軟件開發中,散布于應用中多處的功能被稱為橫切關注點,通常來講,這些橫切關注點從概念上是與應用的業務邏輯相分離的。把這些橫切關注點和業務邏輯分離出來正是AOP要解決的問題。AOP能夠幫我們模塊化橫切關注點,換言之,橫切關注點可以被描述為影響應用多出的功能。這些橫切點被模塊化特殊的類,這些類被稱為切面。

術語定義

通知:切面有必須要完成的工作,在AOP中,切面的工作被稱為通知。通知定義了切面是什么以及何時使用,除了描述切面要完成的工作,通知還解決了何時執行這個工作的問題,它應該在某個方法之前?之后?之前和之后都調用?還是只在方法拋出異常時調用?

連接點:連接點是應用程序執行過程中,能夠插入切面的一個點。

切點:是在連接點的基礎上定義切點,比方說一個類由十幾個方法,每個方法的調用前和調用后都可以插入通知,但是你只想選擇幾個方法插入通知,因此你定義一個切點來選擇你想插入的通知的方法。

切面:切面就是通知和切點的結合。

織入:織入是把切面應用到目標對象并創建新的代理對象的過程,切面在指定的連接點被織入到目標對象中。在目標對象的生命周期里有多個點可以進行織入:編譯期、類加載期、運行期。其中編譯器織入需要特殊的編譯器,類加載器織入需要特殊的類加載器,spring的AOP 是在運行期織入通知的。

Spring的AOP支持

spring提供了AOP的四種支持,分別是:基于代理的經典Spring AOP模式;純POJO切面;@AspectJ注解驅動的切面;@注入式AspectJ切面。spring所創建的通知都是用標準的Java類編寫的,而且定義通知所應用的切點通常會使用注解或在Spring配置文件里采用XML來編寫。

spring只支持方法級別的連接點。
在spring AOP中,要使用AspectJ的切點表達式語言來定義切點,關于Spring AOP的AspectJ切點,最重要的一點就是Spring僅支持AspectJ切點指示器的一個子集:
1.arg() 限制連接點匹配參數為指定類型的執行方法;
2.@args() 限制連接點匹配參數由指定注解標注的執行方法;
3.execution() 用于匹配是連接點的執行方法;
4.this() 限制連接點匹配AOP代理的bean引用為指定類型的類
5.target 限制連接點匹配目標對象為指定類型的類
6.@target() 限制連接點匹配特定的執行對象,這些對象對應的類要具有指定類型的注解
7.within() 限制連接點匹配指定的類型
8.@within() 限制連接點匹配特定注解所標注的類型
9.@annotation 限定匹配帶有指定注解的連接點

spring 注解創建切面

目標對象:

package concert;
public interface Performance{
    public void perform();
}

切面對象:

package concert;

@Aspect//表示Audience的實例是一個切面
public class Audience{
    @Before("execution(**concert.Performance.perform(..))")
    public void silenceCellPhones(){
    //在perfrom方法執行之前
    }
    @Before("execution(**concert.Performance.perform(..))")
    public void takeSeats(){
    //在perfrom方法執行之前
    }
    @AfterReturning("execution(**concert.Performance.perform(..))")
    public void silenceCellPhones(){
    //在perfrom方法執行之后
    }
    @AfterThrowing("execution(**concert.Performance.perform(..))")
    public void silenceCellPhones(){
    //在perfrom方法拋出異常之后
    }
}

上面的類中切點表達式execution(**concert.Performance.perform(..))多次出現,我們也可以通過@Pointcut注解避免每次都寫很長的切點表但是如下所示:

@Aspect//表示Audience的實例是一個切面
public class Audience{
    @Pointcut("execution(**concert.Performance.perform(..))")
    public void performance(){}
    @Before("performance()")
    public void silenceCellPhones(){
    //在perfrom方法執行之前
    }
    @Before("performance()")
    public void takeSeats(){
    //在perfrom方法執行之前
    }
    @AfterReturning("performance()")
    public void silenceCellPhones(){
    //在perfrom方法執行之后
    }
    @AfterThrowing("performance()")
    public void silenceCellPhones(){
    //在perfrom方法拋出異常之后
    }
}

接下來需要在配置文件中配置切面如下所示:

@Configuration
@EnableAspectJAutoProxy//啟動AspectJ自動代理
@ComponentScan
public class ConcertConfig{
}
//或者在配置文件中配置中添加

表示啟動切面代理

環繞通知:

@Aspect//表示Audience的實例是一個切面
public class Audience{
    @Pointcut("execution(**concert.Performance.perform(..))")
    public void performance(){}
    
    @Before("performance()")
    public void watchPerformance(ProceedingJoinPoint jp){
        //在方法之前執行
        System.out.println(" beform the method is invoked");
        jp.proceed()//控制權交給目標方法
        //在方法之后執行
        System.out.println(" after the method is invoked");
    }
    
}
處理通知中的參數
public class Audience{
    @Pointcut("execution(**concert.Performance.perform(int))&&args(trackNumber)")
    public void performance(){}
    
    @Before("performance(trackNumber)")
    public void watchPerformance(int trackNumber){
        //截獲傳遞給目標方法的參數并傳遞給切面中處理方法
        System.out.println(trackNumber);
    }
    
}
xml中聲明切面

spring AOP提供的xml配置元素:
1. 定義AOP通知;
2. 后置通知;
3. 返回通知
4. 環繞通知
5. 定義一個切面
6. 啟用切面注解驅動
7. 前置通知
8. 頂層的AOP配置元素;
9.:定義個切點


    
        
          
         
         

    

定義切點:


    
        
        
          
         
         

    

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70380.html

相關文章

  • Spring AOP實現機制

    摘要:本文主要介紹的兩種代理實現機制,動態代理和動態代理。直接使用首先定義需要切入的接口和實現。我實現了一個工廠類來獲取代理對象代理具體使用輸出結果動態代理我們再新建一個來,這次不實現任何接口。 AOP(Aspect Orient Programming),一般稱為面向切面編程,作為面向對象的一種補充,用于處理系統中分布于各個模塊的橫切關注點,比如事務管理、日志、緩存等等。AOP實現的關鍵在...

    dendoink 評論0 收藏0
  • 【好好面試】手把手調試,教你分析Spring-Aop

    摘要:思考之所以會選擇為切入點,是因為通過命名可以看出這是用來構建代理強化對象的地方,并且由于是先將目標類加載到內存中,之后通過修改字節碼生成目標類的子類,因此我猜測強化是在目標類實例化后觸發的時候進行的。 【干貨點】 此處是【好好面試】系列文的第11篇文章。看完該篇文章,你就可以了解Spring中Aop的相關使用和原理,并且能夠輕松解答Aop相關的面試問題。更重要的是,很多人其實一看源碼就...

    aervon 評論0 收藏0
  • Spring 基本應用——IoC 和 AOP

    摘要:的兩大核心機制是控制反轉和面向切面編程,對于初學者來講,搞清楚這兩個核心機制就掌握了的基本應用。配置對象張三添加標簽對應屬性名,是屬性的值。若包含特殊字符,比如張三,使用張三進行配置,如下所示。 前言 對于任何一個 Java 開發人員,Spring 的大名一定如雷貫耳,在行業中可謂是無人不知、無人不曉,說它是 Java 領域第一框架毫不為過。 showImg(https://segme...

    DirtyMind 評論0 收藏0
  • Hello Spring-AOP

    摘要:簡介什么是面向切面編程,是對傳統的面向對象編程的補充。通知有五種通知,執行前,執行后,執行成功后,執行拋出異常后,環繞通知。連接點連接點是一個應用執行過程中能夠插入一個切面的點。 OOP(Object Oriented Programming)面向對象編程解決了縱向上的層次分割,例如MVC模式將展示層、持久化層、邏輯處理層一一分開了,使得開發效率得到了較大提高,但是這只是縱向上的分割,...

    Kahn 評論0 收藏0

發表評論

0條評論

explorer_ddf

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<