# 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

# @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

实现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

# 说明

上述的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
最近更新: 2020/5/29 上午2:22:19