一、配置文件1、配置pom.xml配置文件,导入所需要的类
aopalliance
aopalliance
1.0
org.aspectj
aspectjweaver
1.9.1
org.springframework
spring-aspects
5.0.7.RELEASE
复制代码2、配置springmvc.xml配置文件
<context:component-scan base-package=“Controller,Service,Dao” />
<aop:aspectj-autoproxy proxy-target-class=“true”/> 复制代码二、代码实战演练1、写一个基础函数@RestController
public class AopController {
@RequestMapping(path = “/div”)
public int div(@RequestParam(name = “i”) int i, @RequestParam(name = “j”) int j){
return i/j;
}
} 复制代码2、写一个切面类,包含四种基本功能:前置通知:@Befor,后置通知:@After,返回通知:@AfterReturning,异常通知:@AfterThrowing。注意要用@Aspect注解这个类,告诉Ioc容器这是个切面类。package Controller;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@Aspect
//Aspect告诉容器这是一个切面类
@Component
//Component将这个类导入容器
public class AopAspectj {
//pointcut获取公共的切入点
@Pointcut(value = "execution(public * Controller.AopController.*(..))")
public void PointCut(){ }
//@Before 表述在方法前执行
@Before(value = "PointCut()")
//JoinPoint一定要出现在参数表的第一位
public void divStart(JoinPoint joinPoint){
//获取参数
Object[] Arg = joinPoint.getArgs();
System.out.println(""+joinPoint.getSignature().getName()+"除法开始"+ Arrays.asList(Arg) +"");
}
//joinPoint.getSignature()获取类的信息
//@After 表示在方法之后执行
@After("PointCut()")
public void divEnd(){
System.out.println("除法结束");
}
//AfterReturning 表示在返回之后执行
@AfterReturning(value = "PointCut()",returning ="result")
public void divReturn(Object result){
System.out.println("除法正常返回结果"+result+"");
}
//@AfterThrowing 表示抛出异常
@AfterThrowing(value = "PointCut()",throwing = "exception")
public void divException(Exception exception) {
System.out.println("除法异常"+exception+"");
}
} 复制代码3、测试,运行项目之后,使用url: http://localhost:8080/div?i=1&&j=1,控制台打印的信息div除法开始[1, 1]
除法结束
除法正常返回结果1