Spring之面向切面編程指定切面執行順序
阿新 • • 發佈:2018-12-05
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之面向切面編程指定切面執行順序