CDI 实例生产者

CDI Instance Producer

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

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

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

提前致谢

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

之前创建了

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

抽象阶梯是这样的:

class -> bean -> 实例

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

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