命名 CDI Bean 的默认作用域是什么?

没有附加注释的 CDI Bean 是否有任何默认作用域?我没有在官方焊缝文档中找到任何相关信息。@Named@...Scoped

可以通过 JSF 访问 Bean,而无需额外的注释,因此似乎可能存在一些隐式作用域。@Named

谢谢


答案 1

默认作用域是相关伪作用域,如焊缝文档中所述:@Dependent

CDI 具有所谓的依赖伪作用域。这是不显式声明作用域类型的 Bean 的默认作用域。[...]从属 Bean 的实例永远不会在不同的客户端或不同的注入点之间共享。它严格来说是其他对象的依赖对象。它在创建它所属的对象时实例化,当它所属的对象被销毁时被销毁。

此注释的 javadoc 提供了有关此作用域的更多信息:

使用作用域声明的 Bean @Dependent与其他内置作用域类型的 Bean 的行为不同。当 Bean 被声明为作用域@Dependent时:

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

答案 2

推荐