Spring-AOP基於JAVA註解實現
阿新 • • 發佈:2019-02-08
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切面實現。