1. 程式人生 > >Spring-AOP基於JAVA註解實現

Spring-AOP基於JAVA註解實現

1.選擇切面切點或者連線點
定義一個需要切面的介面

//Spring-AOP程式設計是基於方法的切面程式設計,及只能在方法前後進行切面程式設計
//現在就對下面這個介面中的方法進行切面程式設計
public interface Performance{
    public void perform();
}

使用java表示式語言進行切點的編寫

//表示式( 任意返回值 cencert包下的Perfromance類下的perform方法 切面)
execution( * concert.Performance.perform())

2.使用註解建立切面
定義切面

@Aspect
public
class Audience{ @Before("execution( * concert.Performance.perform())") public void say(){ system.out.println("前置通知切面"); } @AfterReturning("execution( * concert.Performance.perform())") public void say(){ system.out.println("後置通知切面"); } }

1.定義切點:定義一個需要進行切面程式設計的介面方法
2.編寫切點表示式:通過表示式可以將需要切面程式設計的方法,方便的放到切面中


3.編寫切面:使用@Aspect定義一個切面類,在方法上新增切面型別註解@Before,@AfterReturning將這個方法分別編織到切點之前後之後。

3.以上操作還不能建立一個通知Spring,需要在Spring中配置Audience為切面

<context:compent-scan base-package="xxxx" / >自動掃描bean裝配到spring中
<aop:aspectj-autoproxy />啟用Aspectj自動代理
<bean class="xxx.xxx"/>什麼bean

對於上面的這種操作需要注意:Spring的AspectJ自動代理僅僅使用@AspectJ作為建立切面的指導,切面依然是基於代理的。在本質上,它依然是Spring基於代理的切面。這一點非常重要,因為這就意味著儘管使用的是@AspectJ註解,但是我們仍然限於代理方法的呼叫。如果想要利用AspectJ的所有能力,我們必須僅僅使用AspectJ並不依賴Spring來建立基於代理的切面。

另外還有一種更為方便的方式通過Spring的AOP名稱空間進行基於XML配置的aop切面實現。