在程序运行期间,不修改代码的情况下,对方法进行增强。
优点:
减少重复代码,提高开发效率,维护方便。
AOP实现原理:
1,JDK动态代理,需要接口
2,Cglib动态代理,不需要接口,只需要类即可。
JoinPoint:连接点,所有可以被增强的方法
类里面哪些方法可以被增强,这些方法被称为连接点。在spring的aop中,指的是业务层的类的所有现有方法。
Pointcut:切入点,具体项目中真正已经被增强的方法。
在类中有很多方法可以被增强,但是实际开发中,我们增强的往往就那几个,那么这些被实际增强的方法叫切入点。
Advice:通知/增强,具体用于增强方法的代码。
比如给某个切入点扩展校验权限的功能,那么这个校验权限就是增强或者通知。
通知分为:
1,前置通知@Before():原来方法执行之前
2,后置通知@AfterReturning():原来方法执行之后,特点:可以得到被增强方法的返回值
3,环绕通知@Around:在方法之前和之后执行,特点:可以阻止目标方法执行
4,异常通知@AfterThrowing:在目标方法出现异常时执行,如果方法没有异常出现,则不执行。特点:可以获取异常信息
5,最终通知@After():无论方法是否有异常,总是被执行的。
切面:
把通知应用到切入点的过程
依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.22.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.22.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.22.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency>
</dependencies>
通过xml配置文件来应用aop
spring aop配置文件方式使用_angen2018的博客-CSDN博客_springaop配置文件
SpringAOP中的JointPoint和ProceedingJoinPoint使用详解(附带详细示例)_如何在5年薪百万的博客-CSDN博客_proceedingjoinpoint.getargs
通过注解方式配置切面