命名 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 实例 - 它是如何工作的?