昨天刚刚说了在用Cglib完成我的持久层的设计,我实现了一个通用的clone方法,但是有一个问题,因为我在后台保留了一个和数据库记录对应的对象,其他的部分要使用的时候都是从那个记录clone一个出来,为了防止潜在的修改,必须进行深度clone,刚开始我就是用了一个简单的递归clone,但是不行,在存在关系的时候就会无休止的clone下去,最后StackOverflowError了。本来想把刚刚创建的保存下来标记一下,但是多线程不太好处理,最后想到的就是使用ThreadLocal,把刚刚clone出来还未进行深度clone的那个对象保存到ThreadLocal,如果它的关系类clone的时候需要使用对应的记录就直接返回那个引用而不是再clone,这样就不会StackOverflowError了。

(Visited 54 times, 1 visits today)