一、配置文件
1、配置pom.xml配置文件,导入所需要的类
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.0.7.RELEASE</version>
</dependency> 复制代码
2、配置springmvc.xml配置文件
<!-- 配置组件扫描 -->
<context:component-scan base-package="Controller,Service,Dao" />
<!-- 启动AspectJ自动代理 -->
<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
Sqdmn 发布了193 篇原创文章 · 获赞 40 · 访问量 1万+ 私信 关注