正文

Java对象序列化所引起的循环引用的思考2012-12-19 15:40:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/javaxx/54016.html

分享到:

Java对象序列化所引起的循环引用的思考


解决问题


既然需要引擎更聪明,那就没办法,就得烧香拜佛,希望制造商的产品扩展性足够好,考虑了足够多的情况。


幸运的是,jaxb提供了有这种扩展。(CycleRecoverable接口)


行军打仗(例子先行):(将以上的例子改下)


@Entity


public class Company implements CycleRecoverable{


@Id


@Column(…)


private String id;


@OneToMany(…)


private Employee employee;


//当遇到循环引用时,java培训用temp替代this,返给jaxb解析。


public Object onCycleDetected(Context arg0) {


Company temp = new Company ();


temp.setId(id);


return temp;


}


//setters/getters


……


}


@Entity


public class Employee implements CycleRecoverable{


@Id


@Column(…)


private String id;


@ManyToOne


private Company company;


public Object onCycleDetected(Context arg0) {


Employee temp = new Employee();


temp.setId(id);


return temp;


}


//setters/getters


……


}


注意到onCycleDetected方法就是一个回调方法,当遇到循环引用时,jaxb引擎会调用这个方法,用return对象来替换this.所以在这个过程中,就可以将引起循环引用问题的关系断开,返回给jaxb.


当然Company和Employee对象没必要全部实现CycleRecoverable接口,但是拿到现实的模型图中去,谁也保证不了他们不跟别的对象有循环的关系存在。因此还是建议大家把模型都实现这个接口,也好一劳永逸。

阅读(2098) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册