pom文件:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
第一步:修改配置文件
我這裏監聽的是Service層
<!-- 聲明spring對@AspectJ的支持 -->
<aop:aspectj-autoproxy proxy-target-class="true" />
第二步:編寫切面類
@Component
@Aspect
public class TestAspect {
@Autowired
private OrderService orderService ;
//切入點配置 表達式
@Pointcut("execution(void com.cmoa.besteasy.yx.service.OrderServiceImpl.updateOrderByEntity*(..))")
public void orderPointCut(){};
//多個切入點 在前置/後置/環繞通知的註解中用 && || 連接
@Pointcut("execution(void com.cmoa.besteasy.yx.service.OrdincomeService.*ByEntity(..))")
public void ordincomePointCut(){};
/**
* 前置通知:目標方法調用前執行的通知,可以在方法調用前完成自定義的行爲。
* @param pjp
* @return
* @throws Throwable
*/
@Before("orderPointCut() || ordincomePointCut()")
public void doBefore(JoinPoint pjp) throws Throwable{
System.out.println("======執行前置通知開始=========");
//獲取參數
Object[] args = pjp.getArgs();
}
/**
* 在方法正常執行通過之後執行的通知叫做返回通知
* 可以返回到方法的返回值 在註解後加入returning
* @param jp
* @param result
*/
@AfterReturning(value=“orderPointCut()”,returning="result")
public void doAfterReturning(JoinPoint jp,String result){
System.out.println("===========執行後置通知============");
}
/**
* 最終通知:目標方法調用之後執行的通知(無論目標方法是否出現異常均執行)
* @param jp
*/
@After(value=“orderPointCut()”)
public void doAfter(JoinPoint jp){
System.out.println("===========執行最終通知============");
}
/**
* 環繞通知:目標方法調用前後執行的通知,可以在方法調用前後完成自定義的行爲。
* @param pjp
* @return
* @throws Throwable
*/
@Around(“orderPointCut() || ordincomePointCut()”)
public Object doAround(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("======執行環繞通知開始=========");
Object result=pjp.proceed();
System.out.println("======執行環繞通知結束=========");
return result;
}
/**
* 在目標方法非正常執行完成, 拋出異常的時候會走此方法
* @param jp
* @param ex
*/
@AfterThrowing(value=EDP,throwing="ex")
public void doAfterThrowing(JoinPoint jp,Exception ex) {
System.out.println("===========執行異常通知============");
}
}
總結:如果切入點正確,可以測試測試了