我正在設計一個系統,通過用一些註釋標記它們來自動更新對象中的成員變量。然後一些其他後臺線程將更新對象。如何找到所有具有特定註釋的Java對象(不是類)?
爲此,執行更新的運行時組件需要知道包含此批註的所有Java對象。我可以看到有些方法可以找到具有註釋類型的類,但是從類到類的實例要困難得多。我想避免在構造函數中明確「註冊」該對象,儘管我可以將其作爲最後的手段。
有關如何實現這一點的任何建議?
我正在設計一個系統,通過用一些註釋標記它們來自動更新對象中的成員變量。然後一些其他後臺線程將更新對象。如何找到所有具有特定註釋的Java對象(不是類)?
爲此,執行更新的運行時組件需要知道包含此批註的所有Java對象。我可以看到有些方法可以找到具有註釋類型的類,但是從類到類的實例要困難得多。我想避免在構造函數中明確「註冊」該對象,儘管我可以將其作爲最後的手段。
有關如何實現這一點的任何建議?
您可以使用某種HashMap緩存來存儲要更新的對象。
1)寫註釋@Updatable
來標記對象可更新
2)寫HashMap中,將包含所有對象更新
3)通過與@Updatable
如果查找的對象初始化上的應用程序的初始化的時間此HashMap您正在使用Spring,您可以爲此編寫自定義BeanPostProcessor
。
好的 - 我更喜歡一個不需要該對象是Spring bean的解決方案,但對於該建議,您的答案很有趣。請注意,對於HashMap(我已經考慮過),我想我需要一個WeakIdentityHashMap,它不幸不存在。 – rghome
你可以看看https://stackoverflow.com/questions/1947122/is-there-a-simple-way-of-obtaining-all-object-instances-of-a-specific-class-in -j –
謝謝,但可能所有這些方法都有點激烈。 – rghome
現有對象沒有內建註冊表,因此,您不會在「過於激烈」類別之外找到解決方案。查找類的對象意味着做垃圾收集器的工作,遍歷所有引用以查找所有現有對象。 – Holger