接着上一篇的例子,這里是使用AspectJ--當前流行的AOP框架來解決問題。
1,首先在項目中添加AOP相關的依賴jar包;
2,創建spring 配置文件,且在創建的時候加入aop命名空間
3,使用spring AOP基於注解的方式
1)在配置文件中加入如下配置:
<!-- 使aspectJ注解起作用:自動為匹配的類生成代理對象 --> <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
2)把橫切關注點的代碼抽象到切面類中
注意點:切面首先是一個IOC容器中的bean,即加入@component注解 ;切面需加入@Aspect注解
3)在類中聲明各種通知:聲明一個方法,在方法前執行用@Before注解,在方法后執行用@After注解
4)可以在通知方法中聲明一個類型為JoinPoint的參數,就能訪問連接點的細節,如方法的名稱和參數等。
具體代碼如圖:
@Aspect//聲明類為一個切面,需要先把類放到一個IOC容器中 @Component public aspect LoggingAspect { //該方法是一個前置通知:在目標方法執行之前執行 @Before(value="execution(int com.test.spring.aop.Calc.*(int, int))") public void beforeMethod(JoinPoint joinPoint){ String methodName=joinPoint.getSignature().getName(); System.out.println("the method "+methodName+" begin with "+Arrays.asList(joinPoint.getArgs())); } //該方法是一個后置通知:在目標方法執行之后執行(無論是否發生異常) @After(value="execution(int com.test.spring.aop.Calc.*(int, int))") public void afterMethod(JoinPoint joinPoint){ String methodName=joinPoint.getSignature().getName(); System.out.println("the method "+methodName+" end"); } }