我目前正在开发自己的ORM,发现自己面临着创建规范化映射的任务,以便防止从数据库中加载相同的实体超过一次。
我的当前做法是使用一个HashMap<Object, WeakReference<Object>>
。键是映射的数据库实体的主键(如果是组合键,则为ArrayList<Object>
),值是WeakReference<Object>
。
我的主要问题是如何清理地图?当对象不再使用时,映射中的弱引用将变为null
,并且我只会在下一次查找时发现此情况(或者永远不会,如果我再也不查找该对象)。我可以使弱引用在被清除时向ReferenceQueue
注册,然后每次查找时都检查该队列。清除的引用不会提示我哪个对象已清除,因此我想我必须对WeakReference
进行子类化以将键存储在映射中,这样我就可以在引用被清除后将其删除。
这是正确的方法,还是有更简单的方法实现呢?