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 模糊了三者之间的界限,鼓励对几乎所有事物使用急切的单例。
传递给我的生产者的实例确实代表有效的 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 模糊了三者之间的界限,鼓励对几乎所有事物使用急切的单例。