java 判断是否已访问会话对象字段

agyaoht7  于 2022-12-17  发布在  Java
关注(0)|答案(2)|浏览(149)

我有一个java对象,比如House,它存储在session中,可以通过很多方法来获取,这个House对象有一个String字段streetAddress,比如method1是一个方法,可以从session中获取这个对象,并且可能访问streetAddress字段。
我所说的访问是指即使是像house.getStreetAddress() != null这样简单地读取该字段。
我现在在method2中,我从会话中检索House对象,并且我想知道streetAddress字段是否曾经被访问过。这个字段是私有的,所以在类之外与它交互的唯一方法是getter和setter方法。是否有可能知道这两个方法中的任何一个在这个会话中是否曾经被调用过?
我研究过java反射,但没有发现任何有用的东西。

myzjeezk

myzjeezk1#

这正是我们编写getter和setter而不是直接访问字段的 * 原因 *。getter可以在内部获取日志,并且不会影响API的用户。

public class House {
  private String streetAddress;
  private boolean streetAddressAccessed;

  public House(String streetAddress) {
    this.streetAddress = streetAddress;
    this.streetAddressAccessed = false;
  }

  public String getStreetAddress() {
    // Somebody called this function; make a note!
    streetAddressAccessed = true;
    return streetAddress;
  }

  public boolean wasStreetAddressAccessed() {
    return streetAddressAccessed;
  }

}
oyt4ldly

oyt4ldly2#

您要么必须编写一个代理,通过它访问House对象,该对象对方法调用进行计数并以某种方式提供这些调用,要么准备House本身的实现以记录对其方法的调用。
另一种可能性是使用所谓的“分析器”来测量被调用方法所花费的时间,这更多的是偶尔使用,例如当你搜索性能瓶颈时。
您可以使用VisualVM,它包含一个非常简单的分析器,可以连接到已经运行的JVM -https://visualvm.github.io/

相关问题