消息通知通常有5种:
- 前置通知
- 返回通知
- 异常通知
- 后置通知
- 环绕通知
1.采用注解的方式
这里使用简单计算器的例子作为示范:
声明一个Calculator的接口:
public interface Calculator {
int add(int i,int j);
int sub(int i,int j);
int mul(int i,int j);
int div(int i,int j);
}
这里只做简单的加减乘除运算。
实现该接口:
@Component
public class CalculatorImpl implements Calculator{
@Override
public int add(int i, int j) {
int result=i+j;
return result;
}
@Override
public int sub(int i, int j) {
int result=i-j;
return result;
}
@Override
public int mul(int i, int j) {
int result=i*j;
return result;
}
@Override
public int div(int i, int j) {
int result=i/j;
return result;
}
}
开始有一个@Component用来实例化一个bean对象。
然后我们想在每个方法执行前输出执行方法的名称和参数就需要配置一个切面对象了。
//把这个类声明为一个切面:需要把该类放入到IOC容器中,再声明为一个切面
@Order //指定切面的优先级,值越小级别越高
@Aspect
@Component
public class LoggingAspect {
//声明该方法是一个前置通知
@Before("execution(public int com.spring.aop.impl.Calculator.*(int, int))")
public void beforeMethod(JoinPoint joinPoint) {
String methodName=joinPoint.getSignature().getName();
List<Object> args=Arrays.asList(joinPoint.getArgs());
System.out.println("The method "+methodName&#