目录
一、Spring AOP底层技术
SpringAop的核心在于动态代理,那么在SpringAop的底层的技术是依靠了什么技术呢?
- 动态代理(InvocationHandler):JDK原生的实现方式,需要被代理的目标类必须实现接口。因为这个技术要求代理对象和目标对象实现同样的接口(兄弟两个拜把子模式)。
- cglib:通过继承被代理的目标类实现代理,所以不需要目标类实现接口。
- AspectJ:早期的AOP实现的框架,SpringAOP借用了AspectJ中的AOP注解。
二、初步实现AOP编程
2.1实现AOP需要以下注解:
注解 | 说明 |
---|---|
@SpringJUnitConfig | 在JUnit测试类中使用Spring测试上下文配置 |
@Aspect | 将类标记为切面类,定义切面逻辑和增强方法的位置 |
@EnableAspectJAutoProxy | 开启AspectJ自动代理,用于启用Spring AOP的功能 |
2.2需要导入以下依赖
<!-- 切面实现 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>6.0.6</version>
</dependency>
<!-- spring核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- spring-test容器测试 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>6.0.6</version>
<scope>test</scope>
</dependency>
2.3 增强(通知)注解
注解 | 说明 |
---|---|
@Before | 在目标方法执行前执行的增强逻辑 |
@AfterReturning | 在目标方法成功返回后执行的增强逻辑 |
@AfterThrowing | 在目标方法抛出异常后执行的增强逻辑 |
@After | 在目标方法执行后执行的增强逻辑 |
@Around | 包裹目标方法,在目标方法执行前后都可以执行自定义的增强逻辑 |
实现增强(通知)的步骤
- 定义方法存储增强代码
- 使用注解配置,指定插入目标的位置
- 配置切点表达式(选中插入的方法,切点)
- 补全注解,加入到ioc容器,并且设置切面@Aspect
- 开启Aspect注解注释
案例代码: