1.需要被代理的对象
//接口
public interface ICalculator {
int div(int i,int j);
}
//需要被代理点实现类
@Component(value = "calculatorImpl")
public class CalculatorImpl implements ICalculator {
@Override
public int div(int i, int j) {
System.out.println(i/j);
return i/j;
}
}
2.切面类
//切面类
@EnableAspectJAutoProxy
@Component
@Aspect
public class AspectTest {
/**
* 切入点
*/
@Pointcut(value = "execution(* com.gaobin.java.aop.ICalculator.div(..))") // 定义一个切入点
public void beforePointcut() {
}
/**
* 前置通知
*/
@Before("beforePointcut()")
public void doBeforeCheck(){
System.out.println("Calculator Before");
}
/**
* 后置通知
*/
@After("beforePointcut()")
public void doAfterCheck(){
System.out.println("Calculator After");
}
/**
* 异常通知
*/
@AfterThrowing("beforePointcut()")
public void doAfterThrowingCheck(){
System.out.println("Calculator AfterThrowing");
}
/**
* 返回通知
*/
@AfterReturning("beforePointcut()")
public void doAfterReturningCheck(){
System.out.println("Calculator AfterReturning");
}
}
3.启动
public class App {
public static void main(String[] args) throws InterruptedException {
ApplicationContext ac = new ClassPathXmlApplicationContext("spring-aop.xml");
ICalculator calculator = (ICalculator) ac.getBean("calculatorImpl");
calculator.div(1,0);
}
}