AspectJ的注解開發AOP:切點定義


通過@Pointcut為切點命名,方便我們統一管理

在每個通知內定義切點,會造成工作量大,不易維護,對於重復的切點,可以使用@Pointcut進行定義

切點方法:private void無參方法,方法名為切點名

當通知多個切點時,可以使用||來進行連接

具體代碼:

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;

import java.math.BigInteger;

@Aspect
public class aspectj {
    @Before(value = "execution(* com.AspecJ.xiaomaoDao.*(..))")
    public void before(){
        System.out.println("我是前置通知!");
    }


    @AfterReturning(value = "Mypoint2()",returning = "element")
//    使用returning來接受返回值
    public void After(Object element){
        System.out.println("我刪除了"+element); //打印輸出了返回值
    }

    @Around(value="MyPoint1()")
    public Object around(ProceedingJoinPoint joinPoint){
        Object obj=null;
        System.out.println("環繞前");
        try {
            obj=joinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        System.out.println("環繞后");
        return obj;
    }



    @AfterThrowing(value = "MyPoint()",throwing = "throwinfo")
    public void throwafter(Throwable throwinfo){
        System.out.println("發生了異常,異常信息如下:");
        System.out.println(throwinfo.getMessage());
    }



    @After(value = "MyPoint()")
    public void after(){
        System.out.println("最終通知執行了!");
    }

    @Pointcut(value = "execution(* com.AspecJ.xiaomaoDao.find())")
    public void MyPoint(){}

    @Pointcut(value = "execution(* com.AspecJ.xiaomaoDao.update())")
    public void MyPoint1(){}

    @Pointcut(value = "execution(* com.AspecJ.xiaomaoDao.delete())")
    public void Mypoint2(){}

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM