SpringAOP處理通知中的引數
阿新 • • 發佈:2018-12-30
Spring藉助AspectJ的切點表示式語言來定義Spring切面
在spring中嘗試使用其他指示器時,會丟擲IllegalArgument-Exception異常。
如上的這些指示器,只有exception指示器是實際執行匹配的,而其他都是用來限制匹配的。
切面表示式分析
帶引數的切點表示式分解
在該切點表示式中使用了args(trackNumber)限定符。表示傳遞給playTrack()方法的int型別引數也會傳遞到通知中去。引數名trackNumber也與切點方法簽名中的引數相匹配。
建立切面
@Aspect
public class TrackCounter {
@Pointcut("execution(* com.wqh.aop.CompactDisc.playTrack(int))&&args(trackNumber)")
public void trackPlayder(int trackNumber){}
@Before("trackPlayder(trackNumber)")
public void countTrack(int trackNumber) {
System.out.println("前置通知:targetNumber=" + trackNumber);
}
}
連線點類
@Service
public class CompactDisc {
public void playTrack(int trackNumber){
System.out.println("trackNumber =" + trackNumber);
}
}
XML配置
<!--啟用AspectJ的自動代理-->
<aop:aspectj-autoproxy/>
<!--宣告bean-->
<bean class="com.wqh.aop.TrackCounter"/>
<!--自動掃描包下的類-->
<context:component-scan base-package="com.wqh.aop"/>
測試
@Test
public void testT(){
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext(
new String[]{"classpath:/spring/applicationContext.xml"});
CompactDisc compactDisc = (CompactDisc) applicationContext.getBean("compactDisc");
compactDisc.playTrack(12);
}
上面給指定方法傳入的引數是12,在通知中獲取到了該引數
另外:在xml中配置切面來處理通知中的引數,其實也差不多,只是把切點表示式放到了XML配置檔案中。