1. 程式人生 > >Spring之面向切面編程指定切面執行順序

Spring之面向切面編程指定切面執行順序

ota 新的 mar date mage 需要 asp http RoCE

前言

面向切面編程,如果出現需要在切面中加如新的功能,但是又不想進入原來切面進行代碼新增。這裏就可以新建一個切面類,指向需要新增功能的切點上即可,但如果你需要讓新增的切面方法在原來切面之前執行,那麽就可以通過@Order進行指定值,值越大越先執行。

原切面類

/**
 * MyAspect 簡要描述
 * <p> TODO:描述該類職責 </p>
 *
 * @author ckmike
 * @version 1.0
 * @date 18-12-5 下午7:09
 * @copyright ckmike
 **/
@Component
@Aspect
public class MyAspect {

    // 指定需要開啟切面的處理入口
    @Pointcut("execution(* com.aop.annotationaop.dao.IUserDao.*(..))")
    public void pointCut(){

    }

    @Before("pointCut()")
    public void begin(){
        System.out.println("開啟事務...");
    }

    @After("pointCut()")
    public void close(){
        System.out.println("關閉事務...");
        System.out.println("-------------------------------");
    }

}

新增切面類


/**
 * MyAspect2 簡要描述
 * <p> TODO:描述該類職責 </p>
 *
 * @author ckmike
 * @version 1.0
 * @date 18-12-5 下午7:46
 * @copyright ckmike
 **/
@Component
@Aspect
@Order(20)
public class MyAspect2 {

    // 指定需要開啟切面的處理入口
    @Pointcut("execution(* com.aop.annotationaop.dao.IUserDao.*(..))")
    public void pointCut(){

    }

    @Before("pointCut()")
    public void log(){
        System.out.println("打開記錄日誌...");
    }

    @After("pointCut()")
    public void close(){
        System.out.println("關閉日誌記錄");
    }
}

技術分享圖片
總結:指定@Order值越大越先執行,這樣如果需要進行擴展就非常的方便,都不需要進入到原來的切面中進行編碼,維護自己的切面類就可以啦。

Spring之面向切面編程指定切面執行順序