天天看點

Spring之面向切面程式設計指定切面執行順序

前言

面向切面程式設計,如果出現需要在切面中加如新的功能,但是又不想進入原來切面進行代碼新增。這裡就可以建立一個切面類,指向需要新增功能的切點上即可,但如果你需要讓新增的切面方法在原來切面之前執行,那麼就可以通過@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("關閉日志記錄");         }     }           
Spring之面向切面程式設計指定切面執行順序

總結:指定@Order值越大越先執行,這樣如果需要進行擴充就非常的友善,都不需要進入到原來的切面中進行編碼,維護自己的切面類就可以啦。

繼續閱讀