在类中使用@Inject annoation时出错

时间:2016-09-19 12:36:39

标签: java spring java-ee dependency-injection cdi

假设我有A,B,C类,其中B类包含setter和getter。   我想在A类中使用B类(通过设置为true对B类执行Setter操作)和在C类中使用(对B类执行getter操作)。   但是我面临的问题是,如果对同一个B类对象执行get,则应该在C类中打印,而不是打印出false。   摘录如下

Class A {
    @Inject
    B b;
    //Setting true
    b.set(true);
}

Class B {
    boolean b;
    //Setter
    //Getter
}

Class C {
    @Inject
    B b;
    //
    boolean ball=b.get();
    Log.info(ball) //False is getting printed instead of true why is this!!
}

1 个答案:

答案 0 :(得分:2)

问题是,你没有给你的bean 范围 - 因此默认情况下它们都是@Dependent。在某些情况下这很好,但是将@Dependent bean注入另一个这样的bean会创建一个新实例

换句话说,注入class B的{​​{1}}与注入Class A的{​​{1}}不等。

现在,如何解决这个问题?

例如,你可以使class C成为class B bean。应用程序范围从CDi容器启动(从开始)到结束。这样整个应用程序中就会有一个实例,因此bean的状态将在你注入的所有位置之间共享。

@ApplicationScoped

只是旁注:此处的另一个答案建议使用@ApplicationScoped Class B { boolean b; //Setter //Getter } 。我建议反对它,特别是如果你在EE环境中。