我正在使用Java反射进行大量工作,并且正在使用地图存储应用程序中每个bean的元数据。我使用className作为键,所以问题是当询问bean的className时。

bean.getClass().getName()


我可以得到两个不同的结果,具体取决于bean是否是延迟加载的(有些关系是延迟的,有些不是,但是我想同时使用它们。

例如,类:

package com.factorit.beans;<br>
public class Task  implements java.io.Serializable {


如果在正常的加载对象中调用,它将返回:

com.factorit.beans.Task


但是如果在惰性初始化对象中调用,它将返回

com.factorit.beans.Task$$EnhancerByCGLIB$$f9d61939


我想知道是否有办法做到这一点,或者我是否必须解析String。

非常感谢您的帮助或建议。

编辑:
只是添加一些信息:
我的惰性注释看起来像这样:

@javax.persistence.ManyToOne(fetch = javax.persistence.FetchType.LAZY)


我正在使用Struts 2.1.8.1,Hibernate 3和Spring 2.5.6。

最佳答案

如果正在调试struts2-json-plugin 2.1.8.1,并且在方法JSONWritter.bean(Object object)
我发现他们正在使用这条线

if (clazz.getName().indexOf("$$EnhancerByCGLIB$$") > -1) {


因此,即使他们必须解析字符串,我也认为没有更好的方法。
谢谢@TomaszNurkiewicz的帮助。

09-28 03:28