我有一个java对象,比如House
,它存储在session中,可以通过很多方法来获取,这个House
对象有一个String字段streetAddress
,比如method1
是一个方法,可以从session中获取这个对象,并且可能访问streetAddress
字段。
我所说的访问是指即使是像house.getStreetAddress() != null
这样简单地读取该字段。
我现在在method2
中,我从会话中检索House
对象,并且我想知道streetAddress
字段是否曾经被访问过。这个字段是私有的,所以在类之外与它交互的唯一方法是getter和setter方法。是否有可能知道这两个方法中的任何一个在这个会话中是否曾经被调用过?
我研究过java反射,但没有发现任何有用的东西。
2条答案
按热度按时间myzjeezk1#
这正是我们编写getter和setter而不是直接访问字段的 * 原因 *。getter可以在内部获取日志,并且不会影响API的用户。
oyt4ldly2#
您要么必须编写一个代理,通过它访问
House
对象,该对象对方法调用进行计数并以某种方式提供这些调用,要么准备House
本身的实现以记录对其方法的调用。另一种可能性是使用所谓的“分析器”来测量被调用方法所花费的时间,这更多的是偶尔使用,例如当你搜索性能瓶颈时。
您可以使用VisualVM,它包含一个非常简单的分析器,可以连接到已经运行的JVM -https://visualvm.github.io/