一、核心代码
package com.target;
//com.target 目标接口 即核心代码
public interface ArithmeticCalculator {
int add(int i,int j);
int div(int i,int j);
}
package com.target;
import org.springframework.stereotype.Component;
@Component("arithmeticCalculator")
public class ArithmeticCalculator_impl implements ArithmeticCalculator{
public int add(int i, int j) {
// TODO Auto-generated method stub
return i+j;
}
public int div(int i, int j) {
// TODO Auto-generated method stub
return i/j;
}
}
二、切点+通知
import java.lang.reflect.Method;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Aspect
@Component("advice")
public class adviceMethod {
@Before("execution(public int com.target.ArithmeticCalculator_impl.*(..))") //通知
public void before(JoinPoint point)
throws Throwable {
System.out.println("连接点之前执行");
}
}
三、applicationContext.xml
<!-- target -->
<context:component-scan base-package="com.target">
</context:component-scan>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
结合十二.1来看@component、@aspect、@Before为什么这样写
注意十二.1和2的通知写法不同