java - 如何统计方法的调用次数?

标签 java jakarta-ee interceptor

使用拦截器来统计调用次数。

我使用 java ee 创建了一个应用程序,其中包含 ejb 端和客户端。现在我必须使用拦截器计算客户端为每个方法调用方法的次数。

我不明白如何修改拦截器类。这是我的代码。

import javax.interceptor.AroundInvoke;
import javax.interceptor.InvocationContext;

public class InterceptorsBean {

    @AroundInvoke
    public Object methodInterceptors (InvocationContext ctx) throws Exception {        
        System.out.println("Method invocated: " + ctx.getMethod().getName());
        return ctx.proceed();
    }    

}

如何添加计数功能?

最佳答案

只需将字段初始化为 0,然后在输入方法时递增它。

如果方法是静态的,则将其设为静态字段。

并将变量设置为私有(private),并根据需要使用实例或静态方法来检索它。这样其他可以调用该方法的人就无法更改该变量。

如果您想对多个方法执行此操作,请使用映射并使用方法名称作为键来检索适当的计数器。

public class MapCounterDemo {

   private Map<String, Integer> counters = new HashMap<>();

   public static void main(String[] args) {
      MapCounterDemo demo = new MapCounterDemo();
      demo.foo();
      demo.foo();
      demo.foo();
      demo.bar();
      demo.bar();
      System.out.println(demo.counters);
   }

   public void foo() {
      update("foo");

   }

   public void bar() {
      update("bar");
   }

   private void update(String method) {
      counters.compute(method,
            (k, v) -> v == null ? 1
                  : ++v);

   }

}

关于java - 如何统计方法的调用次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56327894/

相关文章:

tomcat - 无法在tomcat上使用ActiveMQ消息

java - 在另一个 JVM 上执行 GC 的 RMI 程序

java - CXF 3.0.4 SOAP客户端拦截器传递参数

java - 将三个表内连接到 java DTO

java - Sonar 违规 : Invoke method(s) only conditionally

web-services - Web 服务 Java EE

java - 如何在并发环境中注意网络请求?

flutter - Flutter 中的 JWT/RefreshToken 与 ExpiredTokenRetryPolicy/Interceptor

java - Spring Batch - 使用带有列表列表的 ItemWriter

java - 访问映射网络驱动器时出现问题