【发布时间】:2012-11-06 15:56:44
【问题描述】:
我使用 Seam 2.2。我想使用反射从 Seam 组件中获取一个私有字段。 所以我有:
LocalizationEditActionRoot localizationEditActionRoot = (LocalizationEditActionRoot) Component
.getInstance(LocalizationEditActionRoot.class, true);
Class currentClass = localizationEditActionRoot.getClass();
WebDavMockClient mockClient = new WebDavMockClient();
Field f = currentClass.getDeclaredField("davClient");
f.setAccessible(true);
f.set(localizationEditActionRoot, mockClient);
如果我想获得一个名为 davClient(WebDavClient) 的字段,我会收到 NoSuchFieldException。该领域当然是注入。如果我尝试这样的事情:
Class currentClass = Class.forName("fr.isiom.bpms.admin.session.ext.action.root.LocalizationEditActionRoot");
WebDavMockClient mockClient = new WebDavMockClient();
Field f = currentClass.getDeclaredField("davClient");
f.setAccessible(true);
f.set(localizationEditActionRoot, mockClient);
我得到了davClient 字段,但值没有改变。他仍然是 WebDavClient 的实例,而不是 WebDavMockClient。如何更改该字段值?
【问题讨论】:
-
“我得到了字段 davClient 但值没有改变”是什么意思?请记住,注入发生在方法调用周围,因此它可能不适合反射。
-
您使用的是 POJO 还是 EJB?稍后请确保您不是在处理代理或接口而不是某些实现。
标签: java reflection seam seam2