命名CDI bean的默认范围是什么?

时间:2012-04-24 07:24:38

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

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

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

谢谢

1 个答案:

答案 0 :(得分:42)

默认范围是从属伪范围@Dependent,如weld documentation中所述:

  

CDI具有所谓的依赖伪范围。这是默认值   没有显式声明范围类型的bean的范围。 [...]   从不在不同的bean之间共享依赖bean的实例   客户或不同的注射点。它完全是一个依赖   一些其他对象的对象。它是对象实例化的   属于被创建,并在它所属的对象被销毁时被销毁   破坏。

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

  

使用范围@Dependent声明的Bean与使用bean的bean的行为不同   其他内置范围类型。当bean被声明具有范围时   @Dependent:

     
      
  • 在多个注入点之间不共享注入的bean实例。
  •   
  • 注入到容器正在创建的对象中的bean的任何实例都绑定到新的生命周期   创造了对象。
  •   
  • 当评估JSF或JSP页面中通过其EL名称引用bean的Unified EL表达式时,最多只有一个实例   bean被实例化。此实例仅用于服务单个实例   评估EL表达。如果豆EL名称为蓝色,则重复使用   在EL表达式中多次出现,但在从未重复使用时   EL表达式再次被评估,或者当另一个EL表达式被评估时   被评估。
  •   
  • 接收生产者方法,生产者字段,处理者方法或观察者方法调用的bean的任何实例都存在于   只调用的服务。
  •   
  • 注入处理器方法或观察者方法的方法参数的bean的任何实例都存在为方法
    服务   仅限调用。
  •