什么是在Java/Spring中审计方法变量的最佳方式?

3

我已经使用Spring AOP来审计我的方法(这些方法将读取方法参数和参数)。

我不确定如何审计在方法内声明的变量。

在下面的例子中,我想审计“c”和“name”变量。

public void method1(int a, int b){  
     int c = a+b;  
     String user= "test";  
} 

注意:我需要变量名称(例如“c”)和它的值(假设a和b分别是3和4),即7,以及类似地变量名称(即“user”)和它的值(即“test”)以进行审核

在我的应用程序中,假设我有一个叫做"process(Object... values) / process(Map)"的方法,该方法将采用"varargs"或"map"作为其参数(process()方法的定义由我们来确定)。因此,我们需要将要进行审核的变量传递给此process()方法。

我的方法:

 public void method1(int a, int b){  
     int c = a+b;  
     String user= "test"; 

    // logic to send variables to process method
    Map<String, Object> myMap = new HashMap<>();
    myMap.put("c",c); 
    myMap.put("user",name); 
    process(myMap);
} 

这种方法的问题在于开发人员每次都需要创建地图并填充值。
请建议我们是否可以以更有效的方式完成这项工作。
提前致谢。

3
为什么需要访问在方法内定义的变量?你的 process 方法是做什么的? - Bunyamin Coskuner
看一下这个:https://dev59.com/U1XTa4cB1Zd3GeqP5NLY#5530437 - Arsen Davtyan
@BunyaminCoskuner - process方法接收传递给它的参数及其值,并准备另一个对象并将该对象存储到数据库中。 - Ponnapati Lourdu
有更好的想法吗? - Ponnapati Lourdu
你可以为每个本地变量初始化创建一个方法,比如为C创建一个add(int,int)方法,并使用AOP审计add。这样,你就可以审计a、b及其返回类型C。 - Gaurav
1个回答

2
我不确定如何审计在方法内声明的变量。
简单的答案是:你不需要!局部变量有它们的名称是有原因的 - 它们是局部的!此外,一些编译器会将局部变量优化为常量或其他JVM操作码。
审计方法参数可能是有意义的。对于Spring组件的公共非静态方法,可以使用Spring AOP轻松完成此操作。如果您需要审计非Spring对象或内部方法调用(例如this.doSomething())甚至私有方法(糟糕的设计,不应该必要),您仍然可以在Spring应用程序中使用完整的AspectJ。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接