springAOP註解式切面實現

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("===========執行異常通知============");
    }
}

總結:如果切入點正確,可以測試測試了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章