我們之前的方式是采用
@AfterReturning(value="execution(* com.guigu.shen.anotion.UserDaoImpl.*(..))",returning="returnVal") public void afterReturning(JoinPoint joinPoint,Object returnVal) { System.out.println("this is afterReturning 方法"); System.out.println(returnVal); }
這樣的方式。這樣方式的話切點和通知是緊密聯系在一起的,我們換另外一種方式。使用@Pointcut注解來定義切點。把兩者解開。
案例如下:
//第二步定義一個通知,用上切點
//這里寫的就是定義的那個用@Pointcut注解修飾的方法。
@After("mypoint()") public void after() { System.out.print("最終通知,釋放資源"); }
//第一步:定義一個切點 @Pointcut("execution(* com.guigu.shen.anotion.UserDaoImpl.*(..))")
//必須是private void 無參數 private void mypoint() { }
效果和之前的一模一樣。
擴展:有沒有我再想攔截一個切點怎么辦?上面我已經有一個切點了,那么能不能一個advice有多個切點。答案是:當然可以
在開發中有這么種需求,即要切DAO層那邊,也要切Server那邊。