【问题标题】:get real class name for cdi managed bean获取 cdi 托管 bean 的真实类名
【发布时间】:2012-10-17 19:36:04
【问题描述】:

有没有办法获取 CDI 托管实例的真实类名? 我需要真实的类名来匹配它,但是在调用 getClass 方法时我得到了客户端焊接代理名称。 非常感谢。

【问题讨论】:

  • 接口是否可以接受,或者你想要它代理的具体类?
  • 接口也很好,在我的例子中,我有用 CDI 包装的具体类。

标签: java cdi


【解决方案1】:

即使距离最初的问题已经过去五年了,这可能会对可能遇到同样问题的人有所帮助。您可以使用反射获取真实的类名。

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

适用于焊接

【讨论】:

  • 这适用于 Weld,因为它生成的代理是原始类的子类。虽然它适用于 Weld,但它可能不适用于其他实现,具体取决于它代理类的方式。
【解决方案2】:

据我所知,没有可靠的方法来获取代理背后的真实类。事实上,毕竟可能没有真正的班级。 我最终做的是检查类名字符串以查看它是否与 Weld 附加到类名的疯狂字符串匹配。如果不是,那么您正在处理真正的课程。但如果是,则获取代理的超类。这就是你要找的课程。

【讨论】:

    【解决方案3】:

    你必须查看 Weld 的实现,看看 InvocationHandler 是否真的会给你,如果你 getInvocationHandler 然后调用方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-20
      • 2016-07-09
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      相关资源
      最近更新 更多