【发布时间】:2012-10-17 19:36:04
【问题描述】:
有没有办法获取 CDI 托管实例的真实类名? 我需要真实的类名来匹配它,但是在调用 getClass 方法时我得到了客户端焊接代理名称。 非常感谢。
【问题讨论】:
-
接口是否可以接受,或者你想要它代理的具体类?
-
接口也很好,在我的例子中,我有用 CDI 包装的具体类。
有没有办法获取 CDI 托管实例的真实类名? 我需要真实的类名来匹配它,但是在调用 getClass 方法时我得到了客户端焊接代理名称。 非常感谢。
【问题讨论】:
即使距离最初的问题已经过去五年了,这可能会对可能遇到同样问题的人有所帮助。您可以使用反射获取真实的类名。
bean.getClass().getSuperclass().getName()
适用于焊接
【讨论】:
据我所知,没有可靠的方法来获取代理背后的真实类。事实上,毕竟可能没有真正的班级。 我最终做的是检查类名字符串以查看它是否与 Weld 附加到类名的疯狂字符串匹配。如果不是,那么您正在处理真正的课程。但如果是,则获取代理的超类。这就是你要找的课程。
【讨论】:
你必须查看 Weld 的实现,看看 InvocationHandler 是否真的会给你,如果你 getInvocationHandler 然后调用方法。
【讨论】: