命名CDI bean的默认范围是什么?

kos*_*tja 24 java dependency-injection named cdi jboss-weld

@Named没有附加@...Scoped注释的CDI bean 是否有任何默认范围?我没有在Weld官方文档中找到任何相关信息.

一个@Namedbean可以在JSF访问而无需额外的注解,所以一些隐含的范围似乎有可能.

谢谢

Mat*_*ndy 43

默认范围是从属伪范围@Dependent,如焊接文档中所述:

CDI具有所谓的依赖伪范围.这是未明确声明范围类型的bean的默认范围.[...]从不在不同客户端或不同注入点之间共享依赖bean的实例.它严格来说是某个其他对象的依赖对象.当它所属的对象被创建时被实例化,并且当它所属的对象被销毁时被销毁.

此批注javadoc提供了有关此范围的更多信息:

使用范围@Dependent声明的Bean与具有其他内置范围类型的bean的行为不同.当bean声明具有范围@Dependent时:

  • 在多个注入点之间不共享注入的bean实例.
  • 注入到容器正在创建的对象中的bean的任何实例都绑定到新
    创建的对象的生命周期.
  • 当评估JSF或JSP页面中通过其EL名称引用bean的Unified EL表达式时,最多只实例化一个bean的一个实例.此实例仅用于处理EL表达式的单个评估.如果bean EL名称
    在EL表达式中多次出现,则重用它,但在再次计算EL表达式时,或者在计算另一个EL表达式时,永远不会重用
    它.
  • 接收生产者方法,生成器字段,处理程序方法或观察者方法调用的bean的任何实例
    都只存在于为该调用提供服务.
  • 注入到disposer方法或observer方法的方法参数中的bean的任何实例
    都只存在于为方法调用提供服务.