【发布时间】:2014-10-23 18:32:31
【问题描述】:
在 CDI 1.2 中有一种方法可以检查类实例是否被代理?我需要这个,因为我需要获取原始类的名称,而不是代理名称。
@Inject Bean bean;
public void sysout() {
// will print something like com.Bean$$Weld9239823
System.out.println(bean.getClass());
// I don't know how to check if the bean instance if a proxy or real class instance
}
使用 Weld 类我可以完成这项工作:
public void sysout() {
// will print true because this is a proxy
System.out.println(ProxyObject.class.isAssignableFrom(bean));
// will print com.Bean
System.out.println(((TargetInstanceProxy) bean).getTargetInstance());
}
在 CDI 1.1 中没有方法可以做到这一点。如果添加了关于此的方法,我会在 CDI 1.2 文档中搜索,但我什么也没找到。
所以...我错过了一些东西,CDI 1.2 有一种方法可以获取原始类名和实例吗?或者如果没有,有一个简单的在近特征中添加这个特征?
【问题讨论】:
-
找出bean类的用例是什么?考虑到您正在注入
Bean bean,您已经知道它实现了Bean -
你试过这个解决方案了吗? stackoverflow.com/a/7504552/2492784