我正在寻找一种干净的CDI解决方案,而不是依赖于WELD的解决方案,但到目前为止还没有找到...
我需要测试通过@Inject
@Any
MyInterface
bean获取的对象列表中的每个元素是否是代理对象,如果是,则需要获取真实对象进行内省,并获取对象的所有属性。
我的WELD实现:
MyInterface interf = obj;
if (isProxy(interf )) {
interf = (Config) ((TargetInstanceProxy)interf ).getTargetInstance();
}
在这里,isProxy
被定义为(CDI解决方案?):
public boolean isProxy(Object obj) {
try{
return Class.forName("org.jboss.weld.bean.proxy.ProxyObject").isInstance(obj);
} catch (Exception e) {
LOGGER.error("Unable to check if object is proxy", e);
}
return false;
}
有什么建议/提示吗?在官方文档中,我没有找到关于内省的提及(这里)。
然后,我想通过类似以下方式获取bean的所有属性:
Arrays.stream(interf.getClass().getDeclaredFields()).forEach(
field -> extractStuff(...)
);
我们使用Wildfly和WELD,但不想将自己绑定在CDI的实现上。
编辑: 更准确地说,问题是:您是否知道一种干净的CDI解决方案,WELD已经使用TargetInstanceProxy实现了?而不是我需要回到学校或者我是否理解我所写的内容。感谢您花时间帮助!