【问题标题】:Error in using @Inject annoation in classes在类中使用@Inject 注解时出错
【发布时间】:2017-01-27 03:43:40
【问题描述】:

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

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!!
}

【问题讨论】:

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


【解决方案1】:

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

换句话说,您注入到Class A 中的class B 不等于您注入到class C 中的那个。

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

例如,您可以将 class B 设为 @ApplicationScoped bean。应用程序范围从 CDi 容器启动(=从开始)一直持续到结束。这样一来,整个应用程序中就会有一个实例,因此 bean 的状态将在您注入它的所有位置之间共享。

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

只是一个旁注:这里的另一个答案建议使用@Singleton。我建议不要这样做,尤其是在 EE 环境中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-29
    • 2015-12-12
    • 2018-04-13
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    相关资源
    最近更新 更多