第六部分 Spring AOP 应⽤
AOP
本质:在不改变原有业务逻辑的情况下增强横切逻辑,横切逻辑代码往往是权限校验代码、⽇志代码、事务控制代码、性能监控代码。
第1节 AOP 相关术语
1.1 业务主线
在讲解AOP术语之前,我们先来看⼀下下⾯这两张图,它们就是第三部分案例需求的扩展(针对这些扩展的需求,我们只进⾏分析,在此基础上去进⼀步回顾AOP
,不进⾏实现)
上图描述的就是未采⽤
AOP
思想设计的程序,当我们红⾊框中圈定的⽅法时,会带来⼤量的重复劳动。程序中充斥着⼤量的重复代码,使我们程序的独⽴性很差。⽽下图中是采⽤了AOP
思想设计的程序,它把红框部分的代码抽取出来的同时,运⽤动态代理技术,在运⾏期对需要使⽤的业务逻辑⽅法进⾏增强。
1.2 AOP 术语
连接点:⽅法开始时、结束时、正常运⾏完毕时、⽅法异常时等这些特殊的时机点,我们称之为连接点,项⽬中每个⽅法都有连接点,连接点是⼀种候选点
切⼊点:指定
AOP
思想想要影响的具体⽅法是哪些,描述感兴趣的⽅法
Advice
增强:
第⼀个层次:指的是横切逻辑
第⼆个层次:⽅位点(在某⼀些连接点上加⼊横切逻辑,那么这些连接点就叫做⽅位点,描述的是具体的特殊时机)
Aspect
切⾯:切⾯概念是对上述概念的⼀个综合
Aspect
切⾯
=
切⼊点
+
增强 = 切⼊点(锁定⽅法)
+
⽅位点(锁定⽅法中的特殊时机)
+
横切逻辑
众多的概念,⽬的就是为了锁定要在哪个地⽅插⼊什么横切逻辑代码
第2节 Spring中AOP的代理选择
Spring
实现
AOP
思想使⽤的是动态代理技术
默认情况下,
Spring
会根据被代理对象是否实现接⼝来选择使⽤
JDK
还是
CGLIB
。当被代理对象没有实现任何接⼝时,Spring
会选择
CGLIB
。当被代理对象实现了接⼝,
Spring
会选择
JDK
官⽅的代理技术,不过我们可以通过配置的⽅式,让Spring
强制使⽤
CGLIB
。
第3节 Spring中AOP的配置⽅式
在
Spring
的
AOP
配置中,也和
IoC
配置⼀样,⽀持
3
类配置⽅式。
- 第⼀类:使⽤XML配置
- 第⼆类:使⽤XML+注解组合配置
- 第三类:使⽤纯注解配置
第4节 Spring中AOP实现
需求:横切逻辑代码是打印⽇志,希望把打印⽇志的逻辑织⼊到⽬标⽅法的特定位置
(service
层
transfer
⽅法
)
4.1 XML 模式
Spring
是模块化开发的框架,使⽤
aop
就引⼊
aop
的
jar
- 坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.1.12.RELEASE</version>
</dependency> <dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
- AOP 核⼼配置
<!--
Spring基于XML的AOP配置前期准备:
在spring的配置⽂件中加⼊aop的约束
xmlns:aop="http://www.springframework.org/schema/aop"
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd
Spring基于XML的AOP配置步骤:
第⼀步:把通知Bean交给Spring管理
第⼆步