以下代码成功运行,但当引用是应用程序范围的bean时,值不会更改。当bean是Singleton EJB时,值确实会发生变化。
通过AnnotatedParameter和Method.invoke更改值确实会更改值。
有人知道是什么导致了行为上的差异吗?我在(java)文档、规范或其他地方找不到原因。
InjectionPoint ip = ....;
Class bc = ip.getMember().getDeclaringClass();
Object reference = CDI.current().select(bc).get();
Annotated a = ip.getAnnotated();
Object value = ....;
if (annotated instanceof AnnotatedField af) {
Field f = af.getJavaMember();
try {
boolean ac = f.canAccess(reference);
f.setAccessible(true);
f.set(reference, value);
f.setAccessible(ac);
} catch (IllegalAccessException e) {
log.error(String.format("error updating %s with %s",
f, value));
}
}