首先要在配置文件中添加aspectj注解扫描代理,
<!-- 自动代理aspect, 使得@Aspect注解其作用 -->
<aop:aspectj-autoproxy/>
通知分为前置通知,
后置通知
最终通知
异常通知
环绕通知
这里是环绕通知的实例代码
代码如下:
--------------------------代码开始-----------------------------
package com;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
//依然要先加组件注解,因为之前在配置文件中的时候也是要用bean标签配置通知类的
@Component
@Aspect
public class AroundAdvice {
//环绕通知如果没有返回值只能拦截没有返回值的类型,有返回值的话有返回值和没有返回值的都能拦截,因为环绕通知要偷梁换柱就必须要比被拦截的方法完整。
@Around("execution(* *.sum(..))")
public Object doAround(ProceedingJoinPoint jp) {
Object[] obj = jp.getArgs();
for (int i = 0; i < obj.length; i++) {
System.out.println(obj[i]);
}
System.out.println("woshi_before");
Object result = null;
Integer[] a = { 11, 22 };
try {
// proceed()括号里要写确切的数,而不是定义,而且要用数组类型而且符合被拦截的方法的参数类型
result = jp.proceed(a);
//new一个实际数组类型形式是new XX[]{X,X,X...},而非数组是new XX(X,X...);
//result=jp.proceed(new Integer[]{12,13});
System.out.println("woshi_after-returning");
} catch (Throwable e) {
// TODO Auto-generated catch block
System.out.println("woshi_ereo");
e.printStackTrace();
} finally {
System.out.println("woshi_after");
}
return result;
}
}
--------------------------代码结束------------------------------