AspectJ的Spring实现。
实现步骤
使用AspectJ框架实现Aop。
使用aop:目的是给已经存在的一些类和方法,增加额外的功能。前提是不改变原来的类的代码。
使用AspectJ实现Aop的基本步骤:
新建Maven项目
加入依赖
spring依赖
aspectJ依赖
junit单元测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<!-- aspectj -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
创建目标类:接口和他的实现类。
要做的是给类中的方法增加功能。
创建切面类:就是一个普通类,有如下几个要求:
在类的上面加上注解 @AspectJ
在类中定义方法,方法就是切面要执行的功能代码。
在方法的上面加入AspectJ中的通知注解,例如@Before
还需要指定切入点的表达式execution()
创建spring的配置文件:声明对象,把对象交给容器统一管理(声明对象可以使用注解或者xml配置文件
) 声明目标对象
声明切面类对象
声明AspectJ框架中的自动代理生成器标签。
自动代理生成器:用来完成代理对象的自动创建功能的。
创建测试类,从spring容器中获取目标对象(实际就是代理对象)
通过代理执行方法,实现aop的功能增强
@Before前置通知-方法有JoinPoint参数
在目标方法执行之前执行。被注解为前置通知的方法,可以包含一个JoinPoint类型参数。该类型的对象本身就是切入点表达式。通过该参数,可获取切入点表达式、方法签名、目标对象等。
不光前置通知的方法,可以包含一个JoinPoint类型参数,所有的通知方法均可包含该参数。
具体代码实现
首先是目标类的实现代码:
1 | package com.thorine.ba01; |
切面类
1 | package com.thorine.ba01; |
spring配置文件 ApplicationContext.xml
1 |
|
然后在测试类中创建对象,测试目标方法。
1 |
|
输出结果,得到增强功能了的目标方法。