一、AOP简介
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
二、配置AOP
新建一个SpringBoot项目,在pom文件中加入AOP依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
新建一个日志切面类,假设我们需要一个类来打印进入方法或方法执行后需要打印的日志
@Aspect
@Component
public class LogAspect {
/**
* 切入点
* 拦截IndexController的所有方法
*/
@Pointcut("execution(public * com.example.controller.IndexController.*(..))")
public void LogAspect(){}
/**
* 前置通知
*/
@Before("LogAspect()")
public void doBefore(JoinPoint joinPoint){
System.out.println("前置通知:方法执行前");
}
/**
* 后置通知
*/
@After("LogAspect()")
public void doAfter(JoinPoint joinPoint){
System.out.println("后置通知:方法执行后");
}
/**
* 环绕通知
*/
@Around("LogAspect()")
public Object deAround(ProceedingJoinPoint joinPoint) throws Throwable{
System.out.println("方法执行前");
Object proceed = joinPoint.proceed();
System.out.println("方法执行后");
return proceed;
}
}
* @Aspect 表明是一个切面类
* @Component 将当前类注入到Spring容器内
* @Pointcut 切入点,其中execution用于使用切面的连接点。使用方法:execution(方法修饰符(可选) 返回类型 方法名 参数 异常模式(可选)) ,可以使用通配符匹配字符,*可以匹配任意字符。
* @Before 在方法前执行
* @After 在方法后执行
* @AfterReturning 在方法执行后返回一个结果后执行
* @AfterThrowing 在方法执行过程中抛出异常的时候执行
* @Around 环绕通知,就是可以在执行前后都使用,这个方法参数必须为ProceedingJoinPoint,proceed()方法就是被切面的方法,上面四个方法可以使用JoinPoint,JoinPoint包含了类名,被切面的方法名,参数等信息。
创建一个IndexController进行测试
@Controller
public class IndexController {
@GetMapping("/index")
public String index() {
return "index";
}
}
启动项目,在浏览器访问http://localhost:8765/index,控制台如下: