获取CDI管理的Bean的实际类名

4

有没有办法获取CDI受管实例的真实类名? 我需要真实的类名来匹配它,但是当调用getClass方法时,我得到了Client Weld代理名称。 非常感谢。


接口可以接受吗?还是您需要它所代理的具体类? - JustinKSU
接口也很好,我这里有具体的类被包装在CDI中。 - Arash
3个回答

4

虽然原问题已经五年前,但这个答案可能对那些遇到同样问题的人有所帮助。您可以使用反射获取真实类名。

bean.getClass().getSuperclass().getName()

与Weld配合使用

1
这适用于Weld,因为它生成的代理是原始类的子类。虽然它可以在Weld中工作,但根据如何代理类,它可能无法在其他实现中工作。 - Ryan J. McDonough

2
据我所了解,没有可靠的方法来获取代理后面的真实类。事实上,可能根本就没有真正的类。 我最终做的是检查类名字符串,看它是否与Weld附加到类名的奇怪字符串匹配。如果不是,则您正在处理真实类。但如果是,获取代理的超类。那就是你要找的类。

0

你需要查看Weld实现,以确定如果你getInvocationHandler然后调用该方法,是否会给你InvocationHandler。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接