【问题标题】:CDI Instance ProducerCDI 实例生产者
【发布时间】:2020-11-16 10:17:29
【问题描述】:

传递给我的生产者的实例确实代表有效的 bean?

@Qualif1
@Prodcues
B qualif1(@Any Instance<B> instances){
    return instances.select(B1.class).get(); // Select instance of B1 which extends B
}

我想知道实例是否已经是 bean,或者只有选定的实例是容器管理的 bean?

提前致谢

【问题讨论】:

    标签: java cdi javabeans java-ee-8


    【解决方案1】:

    这不取决于使用instances,而是取决于bean 的范围。对get 的调用与任何其他注入点一样工作:如果您get 是一个原型bean,则会创建一个新的bean 实例。如果你 get 是一个急切的单身人士 - 它在你调用 get 之前就已经创建好了。

    您的问题似乎源于混淆了 bean 和 bean 的实例:前者是定义(并且在某种意义上都是由容器“管理”的),后者是实例(直接意义上的“托管”)。

    抽象的阶梯是这样的:

    类 -> bean -> 实例

    所以“bean”既不是一个类(尽管在某些项目中每个 bean 也是一个类)也不是一个实例(尽管在某些项目中每个 bean 也是一个实例)。

    就我个人而言,我责怪 Spring 模糊了三者之间的界限,鼓励在几乎所有事情上使用热切的单例。

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 2015-04-08
      • 2022-10-12
      • 2013-09-17
      • 1970-01-01
      • 2017-09-04
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多