【问题标题】: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 而无需额外的注释,因此似乎有一些隐式范围。

谢谢

【问题讨论】:

    标签: java dependency-injection cdi jboss-weld named


    【解决方案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 文档中的部分。我的错。
    • 没问题!很高兴听到它有帮助!
    猜你喜欢
    • 1970-01-01
    • 2020-02-10
    • 2012-01-20
    • 2017-08-06
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 2015-06-07
    • 2013-10-19
    相关资源
    最近更新 更多