如何找到具有特定注释的所有 Java 对象(不是类)?

Posted

技术标签:

【中文标题】如何找到具有特定注释的所有 Java 对象(不是类)?【英文标题】:How do I find all Java objects (not classes) with a particular annotation? 【发布时间】:2017-05-15 08:23:41 【问题描述】:

我正在设计一个系统来自动更新对象中的成员变量,方法是用一些注释标记它们。然后其他一些后台线程将更新对象。

为此,执行更新的运行时组件需要知道所有包含此注解的 Java 对象。我可以看到有一些方法可以找到带有注释类型的类,但是从类到类的实例要困难得多。我想避免在构造函数中显式地“注册”对象,尽管我可以将其作为最后的手段。

关于如何实现这一点有什么建议吗?

【问题讨论】:

你可以看看***.com/questions/1947122/… 谢谢,但可能所有这些方法都有些过激。 现有对象没有内置注册表,因此,您不会在“有点过于激烈”类别之外找到解决方案。查找类的对象意味着做垃圾收集器所做的事情,遍历所有引用以查找所有现有对象。 【参考方案1】:

您可以使用某种 HashMap 缓存来存储对象以供更新。

1) 写注解@Updatable 标记对象可更新

2) 编写包含所有要更新的对象的 HashMap

3) 在应用程序初始化时通过使用 @Updatable 查找对象来初始化此 HashMap 如果您使用的是 Spring,您可以为此目的编写自定义 BeanPostProcessor

【讨论】:

好的 - 我更喜欢不需要对象是 Spring bean 的解决方案,但无论如何你的回答对于这个建议很有趣。请注意,对于 HashMap(我已经考虑过),我认为我需要一个 WeakIdentityHashMap,但遗憾的是它并不存在。

以上是关于如何找到具有特定注释的所有 Java 对象(不是类)?的主要内容,如果未能解决你的问题,请参考以下文章

查找具有特定属性的所有类

如何强制所有 Java 类具有属性

如何选择页面上的所有表,除非它们包含具有特定类的行

使用注释拉出所有字段(包括另一个对象内的字段和内部类中的字段)

Java找到具有特定值的所有键[重复]

查找是不是在列表中找到具有特定属性值的元素