# AOP 控制代理层
# 描述
# 前言
QmControllerAgentAgency
在AOP上也做了一些封装,他能够代理所有继承了QmController
的类,这样做的好处是我们可以对所有的控制接口进行代理操作,比如我们需要做一个接口访问的日志功能实现,我们可以直接使用这些封装进行一系列的拓展。
# 实现逻辑
QmControllerAgentAgency
是代理中心,它实现了切入的相关逻辑,基础会进行接口进入响应的日志信息。
QmControllerAgent
是代理接口,它提供给调用者进行一系列的业务拓展。
# 使用
# 添加AOP Maven依赖
Spring boot 的 AOP 支持
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
1
2
3
4
2
3
4
# @Import导入
在标注了@SpringBootApplication
的类中使用@Import
导入QmControllerAgentAgency
@SpringBootApplication
@Import({
QmFrameworkApplication.class,
QmControllerAgentAgency.class
})
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
实现
QmControllerAgent
并注册到Spring IOC容器中。
示例代码:
@Component
public class MyAgent implements QmControllerAgent{
@Override
public void before(JoinPoint jp) {
// 当进入接口时,调用该方法。
}
@Override
public void afterReturning(JoinPoint jp, Object result, Long responseTime) {
// 当接口返回数据时,调用该方法。
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 说明
上述的
JoinPoint
对象封装了SpringAop
中切面方法的信息
方法名 | 说明 |
---|---|
Signature getSignature(); | 获取封装了署名信息的对象,在该对象中可以获取到目标方法名,所属类的Class等信息 |
Object[] getArgs(); | 获取传入目标方法的参数对象 |
Object getTarget(); | 获取被代理的对象 |
Object getThis(); | 获取代理对象 |
上述的
QmControllerAgent
接口具体的方法说明
方法名 | 说明 |
---|---|
void before(JoinPoint jp) | 执行请求方法前执行该方法(前置增强) |
void afterReturning(JoinPoint jp, Object result, Long responseTime); | 当请求方法执行完毕时执行该方法(后置增强) |
接口源码说明
/**
* 执行请求方法前执行该方法(前置增强)
*
* @param jp JoinPoint 切入点对象
*/
void before(JoinPoint jp);
/**
* 当请求方法执行完毕时执行该方法(后置增强)
*
* @param jp JoinPoint 切入点对象
* @param result 返回结果
* @param responseTime 响应时间
*/
void afterReturning(JoinPoint jp, Object result, Long responseTime);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
← AES 双向对称加密 全局异常捕获 →