1.Spring AOP简介
1.1 AOP的作用及其优势
- 作用:在程序运行期间,在不修改源码的情况下对方法进行增强。
- 优势:减少重复代码,提高开发效率。
1.2 AOP的底层实现
- 实际上,AOP的底层是通过Spring提供的动态代理技术实现的。
- 在运行期间,Spring通过动态代理技术动态地生成代理对象,代理对象方法执行时进行增强功能的介入,再去调用目标对象的方法,从而完成功能的增强。
1.3 AOP的动态代理技术
- JDK代理:基于接口的动态代理技术
- Cglib代理:基于父类的动态代理技术
1.4 AOP相关概念
- Target(目标对象):代理的目标对象
- Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类
- Joinpoint(连接点):指被拦截到的点。在Spring中,这些点指的是方法。
- Pointcut(切入点):指我们要对哪些连接点进行拦截。(所有的连接点都可以是切入点)
- Adivce(通知/增强):指拦截到连接点之后要做的通知
- Aspect(切面):是切入点和通知的结合
- Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程。Spring采用动态代理织入。
1.5开发明确事项
谁是切点,谁是通知,将切点和通知进行织入配置。
2.基于XML的AOP开发
- 导入AOP相关坐标 (在pom.xml
- 创建目标接口和目标类
- 创建切面类
- 将目标类和切面类的对象创建权交给Spring (在ApplicationContext.xml
- 在applicationContext.xml中配置织入关系
- 测试代码
结构:
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>Lab5-SpringAOP-1.1</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.2</version>