Spring基於註解的Aop實戰以及原理解析
阿新 • • 發佈:2018-11-22
一.新增依賴包
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.2.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.1.2.RELEASE</version> </dependency>
二.編寫業務邏輯類
這次業務邏輯類為一個計算功能的,簡單起見只寫了一個除法,理解思想就行...
public class Calculate { public int div(int a,int b){ return a/b; } }
三.編寫切面類
這裡比較重要,有@Aspect標註為切面類以和業務類分開,還有切點表示式的編寫,以及通知型別等標籤的使用。
//切面類 @Aspect public class LogAspects { @Pointcut("execution (public int com.Aop.Main.Calculate.*(..))") public void pointCut(){} @Before(value= "pointCut()") public void logStart(){ System.out.println("除法開始執行...{}"); } @After(value = "pointCut()") public void logEnd(){ System.out.println("除法結束..."); } @AfterReturning(value = "pointCut()") public void logReturn(){ System.out.println("除法正常返回..."); } @AfterThrowing(value = "pointCut()") public void logThrowing(){ System.out.println("除法異常...{}"); } }
四.AopConfig類
這個類相當於以前的application.xml裡面的beans標籤,@Bean就相當於Bean標籤啦。要注意的一點是@EnableAspestJAutoProxy,這個是代替了以前的xml檔案配置的<aop:aspect-autoproxy>啟動註解式事務
@EnableAspectJAutoProxy @Configuration public class AopConfig { @Bean public Calculate calculate(){ return new Calculate(); } @Bean public LogAspects logAspects(){ return new LogAspects(); } }
五.測試
public class AopMainTest { public static void main(String[] args) { AnnotationConfigApplicationContext configApplicationContext = new AnnotationConfigApplicationContext(); configApplicationContext.register(AopConfig.class); configApplicationContext.refresh(); Calculate c = configApplicationContext.getBean(Calculate.class); c.div(1,2); configApplicationContext.close(); } }
結果如下: