命名 CDI bean 的默认范围是啥?

Posted

技术标签:

【中文标题】命名 CDI bean 的默认范围是啥?【英文标题】:What is the default scope of a Named CDI bean?命名 CDI bean 的默认范围是什么? 【发布时间】:2012-05-04 19:55:09 【问题描述】:

没有额外的@...Scoped 注释的@Named CDI bean 是否有任何默认范围?我在official Weld documentation没有找到任何相关信息。

可以通过 JSF 访问 @Named bean 而无需额外的注释,因此似乎有一些隐式范围。

谢谢

【问题讨论】:

【参考方案1】:

默认作用域是依赖伪作用域@Dependent,如weld documentation中所述:

CDI 具有所谓的依赖伪作用域。这是默认设置 没有显式声明作用域类型的 bean 的作用域。 [...] 依赖 bean 的实例永远不会在不同的 客户端或不同的注入点。它是严格依赖的 某个其他对象的对象。它在对象它时被实例化 属于被创建,当它所属的对象被销毁时 销毁。

javadoc for this annotation 提供了有关此范围的更多信息:

使用范围 @Dependent 声明的 Bean 的行为与具有 其他内置范围类型。当一个 bean 被声明为具有作用域时 @依赖:

从未在多个注入点之间共享任何注入的 bean 实例。 注入到由容器创建的对象中的任何 bean 实例都绑定到新对象的生命周期 创建的对象。 当评估 JSF 或 JSP 页面中通过其 EL 名称引用 bean 的 Unified EL 表达式时,最多有一个 bean 被实例化。这个实例的存在只是为了服务一个单一的 EL 表达式的求值。如果 bean EL name,它会被重用 在 EL 表达式中出现多次,但在 EL 表达式被再次求值,或者当另一个 EL 表达式被求值时 被评估。 任何接收生产者方法、生产者字段、处置者方法或观察者方法调用的 bean 实例都存在于 仅服务该调用。 注入到处置器方法或观察者方法的方法参数中的任何 bean 实例都存在为该方法提供服务 仅调用。

【讨论】:

谢谢你,马特。完全错过了 1.0 文档中的部分。我的错。 没问题!很高兴听到它有帮助!

以上是关于命名 CDI bean 的默认范围是啥?的主要内容,如果未能解决你的问题,请参考以下文章

将较短范围的 Bean 实例注入 CDI 中较大范围的 bean 实例 - 它是如何工作的?

是否在会话范围的 JSF 支持 bean 中观察到 CDI 事件

是否有可能在运行时检测CDI托管bean的范围?

您如何在当前视图(范围)中找到 CDI bean?

将 JSF 托管 bean 迁移到 CDI 托管 bean

mybatis默认别名是啥格式的