一、AOP的作用
AOP,即面向切面编程,是一种编程范式,可以在不修改原程序代码的情况下实现一些额外的功能,比如日志、性能监控、事务管理等。Spring框架的AOP模块,提供了一种便捷的方式来实现AOP编程,可以帮助我们更好地实现系统架构的解耦和功能扩展。
二、案例分析
在数据层定义了两个方法,其中save()方法输出会多一个输出当前时间的功能
当在主入口调用save()方法时会打印结果如下
而调用update()方法打印结果如下
而我们想在不修改源代码的情况下让update()方法也想加入一个输出当前时间的功能。就要用到aop思想。
- 首先在pom文件中添加两个依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.12</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.9</version>
</dependency>
</dependencies>
- 然后在根包下连包带类建立一个切面类
- 切面类 的具体写法如下
package org.itheima.aop;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Component
@Aspect// 加入这两个注解表示这个类是一个切面类
public class Myadice {
// 1定义一个切入点
@Pointcut("execution(void org.itheima.dao.BookDao.update())")// 其中void表示在dao层的原始update()方法的返回值类型
public void m1() {// 方法名随意
}
@Before("m1()") //3.用来绑定切入点和公共方法
// 2创建一个方法放入公共方法
public void m2() {
long l = System.currentTimeMillis();
System.out.println(l);
}
}
- 在配置类中添加注解@EnableAspectJAutoProxy告诉spring这是用注解开发的aop
三、运行结果分析
当我们将要添加的功能指定要给哪个方法添加后,update()方法就也有了输出当前时间的功能