如何在Java中从懒惰的bean中获取真正的类名

如何在Java中从懒惰的bean中获取真正的类名,java,reflection,lazy-evaluation,Java,Reflection,Lazy Evaluation,我经常使用java反射,并使用映射存储应用程序中每个bean的元数据。我使用类名作为键,所以,问题是当一个函数请求一个bean的类名时) 我可以得到两种不同的结果,这取决于bean是否是延迟加载的(有些关系是延迟的,有些不是,但我想同时处理这两种关系) 例如,该类: package com.factorit.beans;<br> public class Task implements java.io.Serializable { 但如果在惰性初始化对象中调用,它将返回 com.

我经常使用java反射,并使用映射存储应用程序中每个bean的元数据。我使用类名作为键,所以,问题是当一个函数请求一个bean的类名时)

我可以得到两种不同的结果,这取决于bean是否是延迟加载的(有些关系是延迟的,有些不是,但我想同时处理这两种关系)

例如,该类:

package com.factorit.beans;<br>
public class Task  implements java.io.Serializable {
但如果在惰性初始化对象中调用,它将返回

com.factorit.beans.Task$$EnhancerByCGLIB$$f9d61939
我想知道是否有办法得到这个,或者我是否必须解析这个字符串

非常感谢您的帮助和建议

编辑: 只需添加一些信息: 我的惰性注释如下所示:

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

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

If正在调试struts2 json插件2.1.8.1,并且在方法
jsonwriter.bean(对象)
我发现他们正在使用这条线路

if (clazz.getName().indexOf("$$EnhancerByCGLIB$$") > -1) {
因此,如果连他们都要解析字符串,我支持没有更好的方法。
谢谢@TomaszNurkiewicz的帮助。

解包CGLIB代理对你有用吗?嗨@TomaszNurkiewicz。我尝试了你所指的帖子,但所有选项的结果都是假的。*AopUtils.isAopProxy(项)*AopUtils.isglibproxy(项)*AopUtils.isjdDynamicproxy(项)
@javax.persistence.ManyToOne(fetch = javax.persistence.FetchType.LAZY)
if (clazz.getName().indexOf("$$EnhancerByCGLIB$$") > -1) {