侧边栏壁纸

springAOP实现业务层万次执行效率检测

2023年10月14日 692阅读 1评论 0点赞
@Component
@Aspect
public class ProjectAdvice{
  @Pointcut("execution(* com.example.service.*Service.*(..))")
  private void servicePt(){}

  @Around("ProjectAdvice.servicePt()")
  public void runSpeed(ProceedingJoinPoint) throws Throwable{
    Signature signature = pjp.getSignature();
    String className = signature.getDeclaringTypeName();
    String methodName = signature.getName();
    long start = System.currentTimeMillis();
    for(int i = 0; i < 10000; i++){
      pjp.proceed();
    }
    long end = System.currentTimeMillis();
    System.out.println("万次执行" + className + "." + methodName + "------" + (end-start) + "ms");
  }
}

代码解析
1. Spring 组件和切面声明

@Component
@Aspect
public class ProjectAdvice {...}

通过@Component注解,我们告诉Spring框架,ProjectAdvice类是一个Spring组件,Spring容器将管理其生命周期。

@Aspect注解表明ProjectAdvice类是一个切面类,它可以包含切点(Pointcuts)和通知(Advices)。

2. 切点定义

@Pointcut("execution(* com.example.service.*Service.*(..))")
private void servicePt(){}

在这里,我们定义了一个切点servicePt,它匹配com.example.service包下所有以"Service"结尾的类的所有方法。

3. 环绕通知定义

@Around("ProjectAdvice.servicePt()")
public void runSpeed(ProceedingJoinPoint pjp) throws Throwable{...}

我们定义了一个环绕通知runSpeed,它将围绕servicePt切点匹配的方法执行。这个通知接受一个ProceedingJoinPoint参数,它提供了对被通知方法的访问。

4. 通知方法体
在通知方法体中,我们做了以下几件事:

获取了被通知方法的签名。
从签名中提取了类名和方法名。
记录了方法执行前的时间。
在循环中执行了被通知方法10000次。
记录了方法执行后的时间。
计算并打印了执行10000次被通知方法所需的时间。

Signature signature = pjp.getSignature();
String className = signature.getDeclaringTypeName();
String methodName = signature.getName();
long start = System.currentTimeMillis();
for(int i = 0; i < 10000; i++){
  pjp.proceed();
}
long end = System.currentTimeMillis();
System.out.println("万次执行" + className + "." + methodName + "------" + (end-start) + "ms");

结论
通过这个简单的示例,我们展示了如何使用Spring AOP框架定义切点和通知,以及如何通过环绕通知测量方法的执行时间。这只是Spring AOP功能的冰山一角,它提供了强大的功能来帮助开发者将横切关注点(cross-cutting concerns)与业务逻辑分离,提高代码的可维护性和可重用性。

0
打赏

—— 评论区 ——

昵称
邮箱
网址
取消
  1. @
    头像
    XJun
    Windows 10 x64 Edition Windows 10 x64 Edition   Google Chrome 129 Google Chrome 129

    我在哪里

人生倒计时
舔狗日记