作业帮 > JAVA > 教育资讯

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

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/09 04:56:25 JAVA
Java教程:Java对象序列化所引起的循环引用的思考
Java教程:Java对象序列化所引起的循环引用的思考JAVA
【无忧考网-Java教程:Java对象序列化所引起的循环引用的思考】:
Java中的模型关系设计中,循环的关系是很常见的,特别是ORM的出现,关系的循环更加有利于维护各自的状态。但就是这种循环的关系,在java对象序列化时,不可避免的会导致循环引用(Cycle Reference)的问题。

    导致CycleReference的情况

    还是举个例子吧(代码说话):一个很典型,很常见的双向引用的对象关系。

@Entity

public class Company{

    @Id

    @Column(....)

    private String id;

    @OneToMany(....)

    private Employee employee;

    //setters/getters

    ......

}

@Entity

public class Employee{

    @Id

    @Column(....)

    private String id;

    @ManyToOne

    private Company company;

    //setters/getters

    ......

}

    另外一种导致这个问题的情况是,多个对象间关系形成一条回路,跟电学有点像。(具体就不举例了,在模型设计时,最好还是避免出现这种情况。)

    导致这种问题的原因

    用jaxb(如果没有特殊解释,本文采用的都是jaxb)序列化Company时,无疑会发生循环引用。

    当序列化引擎解析Company时,它发现这个对象持有一个Employee的引用,转而去骚扰Employee.解析Employee时,发现他又持有Company的引用,又转回Company.如此问题产生。

    引擎它并不知道在遇到循环引用问题时,该怎么处理,它只是忠实得按照固定的算法去执行任务。所以我们得让引擎聪明点,我们得让引擎遇到这种问题有处理机制。

JAVA