什么是CDI @Dependant默认范围?

时间:2018-12-12 00:07:36

标签: servlets cdi

  1. 什么是Java CDI @Dependant默认作用域?

  2. @Dependant CDI bean注入时的作用域是什么 @WebServlet?

  3. java @WebServlet的CDI范围是什么?

2 个答案:

答案 0 :(得分:0)

我将尝试简要地回答与CDI规范的链接,因为这是大多数问题的最终来源。

  

什么是Java CDI @Dependant默认作用域?

CDI spec has a whole chapter dedicated to this,您应该看一下。 它被归类为CDI范围,但具有不同的行为,即为每个注入点创建新实例。

  

将@Dependant CDI bean注入@WebServlet的作用域是什么?

我想您是在问这样一个bean的生命周期,从属bean的生命周期与被注入的bean的生命周期有联系。例如。只要您将其注入其中,依赖的bean就会“存在”。

现在,WebServlet本身并不是一个纯bean,而是一个“注入目标”。这意味着您只需向CDI提供非上下文对象,并让其解析所有IP。在这种情况下,负责注射的人也是responsible for cleanup。我认为只要WebServlet在这里工作,bean就能生存。

  

java @WebServlet的CDI范围是什么?

就像我之前暗示的那样,没有作用域,因为它不是bean,而是注入目标。这是一个(非上下文)对象,它不是CDI维护的(意味着其他人负责创建/销毁),而CDI仅允许您注入其中。

答案 1 :(得分:0)

我做了适当的测试。

原来,尝试将@Dependant CDI bean注入@WebServlet会导致运行时异常:

org.jboss.weld.exceptions.IllegalArgumentException: WELD-001408: Unsatisfied dependencies for type DefaultScopedBean with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject protected com.example.WithDefaultScopeBeanServlet.bean
  at com.example.WithDefaultScopeBeanServlet.bean(WithDefaultScopeBeanServlet.java:0)
      at org.jboss.weld.manager.InjectionTargetFactoryImpl.createInjectionTarget(InjectionTargetFactoryImpl.java:81)
      at org.jboss.weld.manager.InjectionTargetFactoryImpl.createInjectionTarget(InjectionTargetFactoryImpl.java:69)

实际上我缺少beans.xml文件。

添加后,可以将@Default CDI bean插入servlet中,类似于POJO。