【发布时间】:2018-12-12 00:07:36
【问题描述】:
-
什么是 Java CDI
@Dependant默认范围? -
@DependantCDI bean 注入时的作用域是什么@WebServlet? -
java
@WebServlet的CDI作用域是什么?
【问题讨论】:
什么是 Java CDI @Dependant 默认范围?
@Dependant CDI bean 注入时的作用域是什么
@WebServlet?
java@WebServlet的CDI作用域是什么?
【问题讨论】:
我将尝试简要回答 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 只允许您注入它。
【讨论】:
我做了适当的测试。
事实证明,尝试将@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。
【讨论】: