作为一个实验,我通过“load”获取了一个 Hibernate 实体 pojo,并通过正常的序列化将其写入文件。我通过正常的反序列化再次通过单独的程序读取该文件,然后使用反射查找实体对象的代理类包含的字段和方法。
令我惊讶的是,它向我显示了代理类中的所有方法(例如“getHibernateLazyInitializer()”或“CGLIB$SET_THREAD_CALLBACKS(net.sf.cglib.proxy.Callback[])”等)
更重要的是,我能够在反序列化实例上调用“getHibernateLazyInitializer()”方法!现在,如果代理代码是动态生成的,并且如果创建该类的 JVM 关闭后该类不存在,那么我如何调用该方法呢? Hibernate pojo 的方法字节码是否也通过其代理进行序列化/反序列化?
最佳答案
不,事实并非如此。如果您尝试在 Java 进程中反序列化一个对象,而类路径不知道该类,则会出现错误。
关于Java:序列化是否还编写方法代码以流式传输 Hibernate 实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10024109/