美文网首页
切面统计接口耗时

切面统计接口耗时

作者: bit_拳倾天下 | 来源:发表于2021-10-13 11:40 被阅读0次

1. 引入依赖

<!-- 用于织入 -->
<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
  <version>1.9.6</version>
</dependency>
<!-- 引入aspectj -->
<dependency>
  <groupId>aspectj</groupId>
  <artifactId>aspectjrt</artifactId>
  <version>1.5.3</version>
</dependency>

aspectjweaver 是用于织入的,如果是 springBoot 项目可以引入。

2. 编辑切面

本例中是利用注解 + aspectj 对接口进行加强的,注解是为了方便分类和控制接口,实际上注解并不是必须的,可根据实际情况确定。

2.1 创建注解

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface TimeCount {
}

2.2 使用注解

将创建的注解标注在想要增强的方法上,例如:

@TimeCount
public static Result uploadFile(int hostIndex, String bucketname, InputStream inputStream, Map<String, String> params){

2.3 编写切面

拦截带有 @TimeCount 注解的所有方法,使用 @Around 注解,会在需要增强的方法运行前后分别执行一次 timeCount 切面。
切面中涉及到一个类 com.google.common.base.Stopwatch,这是个可以用来计时的类。

    @Around("@annotation(com.hdec.file.annotation.TimeCount)")
    public Object timeCount(ProceedingJoinPoint joinPoint){
        Object object = null;
        Stopwatch stopwatch = Stopwatch.createStarted();
        try{
            object = joinPoint.proceed();
        } catch (Throwable throwable) {
            logger.info("error info: {}", throwable.getMessage());
        }
        logger.info("API completed, takes " + stopwatch.elapsed(TimeUnit.MILLISECONDS)/1000.0 + " s.");
        return object;
    }

3. 织入

pom 中的 plugins 增加以下配置,这一步和第一步中的 aspectjweaver 是一样的,在 SpringBoot 项目中可以省略。

<!-- 编译期织入 -->
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.7</version>
    <configuration>
        <complianceLevel>1.8</complianceLevel>
        <source>1.8</source>
        <target>1.8</target>
        <showWeaveInfo>true</showWeaveInfo>
        <verbose>true</verbose>
        <Xlint>ignore</Xlint>
        <encoding>UTF-8</encoding>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
                <goal>test-compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

AOP 面向切面编程

相关文章

网友评论

      本文标题:切面统计接口耗时

      本文链接:https://www.haomeiwen.com/subject/ggbsoltx.html