命名 CDI Bean 的默认作用域是什么?
2022-09-01 15:33:49
没有附加注释的 CDI Bean 是否有任何默认作用域?我没有在官方焊缝文档中找到任何相关信息。@Named
@...Scoped
可以通过 JSF 访问 Bean,而无需额外的注释,因此似乎可能存在一些隐式作用域。@Named
谢谢
没有附加注释的 CDI Bean 是否有任何默认作用域?我没有在官方焊缝文档中找到任何相关信息。@Named
@...Scoped
可以通过 JSF 访问 Bean,而无需额外的注释,因此似乎可能存在一些隐式作用域。@Named
谢谢
默认作用域是相关伪作用域,如焊缝文档中所述:@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 实例都存在,仅用于为方法
调用提供服务。