e4依赖关系重新注入顺序:字段与方法

时间:2014-12-02 17:13:53

标签: dependency-injection e4

我很惊讶地看到对象被重新注入的顺序没有确定性行为。

public class Test {
    @Inject private Boolean testBool;  

    @Inject
    public void checkNewObject(Boolean testBoolNew) {
        if (!testBoolNew.equals(this.testBool)) {
            System.out.println("Out of sync!");
        } else {
            System.out.println("In sync!");
        }
    }
}

这就是我使用该类的方式:

context.set(Boolean.class, new Boolean(true));
Test test = ContextInjectionFactory.make(Test.class, context);
context.set(Boolean.class, new Boolean(false));

所以,有时我得到输出:

In sync!
In sync!

有时我得到:

In sync!
Out of sync!

这真的不确定吗?还是我只是监督某事?

1 个答案:

答案 0 :(得分:1)

文件明确指出注射顺序应为:

  1. 构造函数注入:选择带有@Inject注释且具有最大可解析参数的公共或受保护构造函数
  2. 字段注入:将值注入使用@Inject注释且具有令人满意的类型的字段
  3. 方法注入:将值注入到使用@Inject注释且具有令人满意的参数的方法
  4. 请参阅:https://wiki.eclipse.org/Eclipse4/RCP/Dependency_Injection#Injection_Order

    我不确定,为什么在你的情况下这并不像预期的那样有效。

    • equals()如何实现MyContent
    • 使用MyContent和/或@Creatable @Singleton进行注释?

    作为旁注:这是一个实际问题还是一个学术问题?为什么有必要将相同的实例注入字段并注入同一目标实例上的方法?如果要使用字段变量来缓存值,可以从方法中进行设置。

    如果您认为这是一个错误,请在此处提交:https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Platform