【发布时间】:2019-01-29 14:07:54
【问题描述】:
我寻找了一个干净的 CDI 解决方案,而不是依赖于 WELD 的解决方案,但到目前为止什么都没有......
我需要测试我使用@Inject @Any MyInterface beans 获得的对象列表中的每个元素是否是代理,而当 true 我需要获取真实对象进行自省并获取对象的所有属性。
我的 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;
}
任何建议/适应症。在官方文档中,我发现没有提到自省 (here)
然后我想通过以下方式获取 bean 的所有属性:
Arrays.stream(interf.getClass().getDeclaredFields()).forEach(
field -> extractStuff(...)
);
我们使用 Wildfly 和 WELD,但不想将我们绑定到 CDI 的实现。 提前致谢!
编辑: 更准确地说,问题是:您知道 WELD已经 使用 TargetInstanceProxy 实施的干净 CDI 解决方案吗?如果我需要回学校,或者如果我明白我在写什么。感谢您抽出时间提供帮助!
【问题讨论】:
-
我想到了一个想法:为什么不能重构遗留代码并将其重写为正确的方式?为什么需要这样的测试?通常情况下,不需要这样做。
-
因为他们不想 :( 对你们来说,用公司的代码做任何你想做的事情总是那么容易吗?
-
我到底对什么投了反对票?如果人们不满意,他们会在这里投反对票吗?
标签: java cdi jboss-weld