假设我有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!!
}
答案 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环境中。