如何找到具有特定注释的所有 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 对象(不是类)?的主要内容,如果未能解决你的问题,请参考以下文章