【问题标题】:What is CDI @Dependant default scope?什么是 CDI @Dependant 默认范围?
【发布时间】:2018-12-12 00:07:36
【问题描述】:
  1. 什么是 Java CDI @Dependant 默认范围?

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

  3. java@WebServlet的CDI作用域是什么?

【问题讨论】:

    标签: servlets cdi


    【解决方案1】:

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

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

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

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

    我想你问的是这样一个 bean 的生命周期。依赖 bean 的生命周期与它们被注入的 bean 的生命周期相关联。例如。只要注入的 bean 存在,依赖 bean 就会“存在”。

    现在,WebServlet 本身并不是一个纯 bean,而是一个“注入目标”。这意味着您只需将一个非上下文对象呈现给 CDI 并让它解析所有 IP。在这种情况下,负责注入的人也是responsible for cleanup。我会假设 bean 的寿命与 WebServlet 在这里一样长。

    java @WebServlet 的 CDI 范围是什么?

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

    【讨论】:

      【解决方案2】:

      我做了适当的测试。

      事实证明,尝试将@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。

      【讨论】:

        猜你喜欢
        • 2012-05-04
        • 2011-01-21
        • 2017-04-10
        • 2014-03-28
        • 2010-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-10
        相关资源
        最近更新 更多