【问题标题】:When should Instance<T> and Provider<T> be used to inject beans in CDI?何时应该使用 Instance<T> 和 Provider<T> 在 CDI 中注入 bean?
【发布时间】:2016-01-12 16:10:45
【问题描述】:

我一直在阅读Instance&lt;T&gt;Provider&lt;T&gt; 的API 文档,但不清楚何时应该使用它们。

以下方法有什么区别?

@Inject
MyBean bean;
@Inject
Instance<MyBean> bean;
@Inject
Provider<MyBean> bean;

【问题讨论】:

    标签: java jakarta-ee dependency-injection cdi


    【解决方案1】:

    Provider&lt;T&gt;是由CDI接口Instance&lt;T&gt;扩展的JSR-330接口。

    注入MyBean,当没有匹配的bean或多个匹配的bean时,你的应用程序会在启动过程中抛出异常。

    注入Instance&lt;MyBean&gt;,bean 解析被委托给应用程序:您可以遍历所有候选bean 和select() 您想要的或调用isUnsatisfied() 并决定当没有匹配的bean 时该怎么做。

    对于具有@Dependent 范围的bean,调用Instance.get() 将为每次调用创建一个新实例,当您不再需要它时,您应该为每个此类实例调用Instance.destroy(t)

    Provider 只有get() 方法,但没有destroy()select() 并且不支持迭代。在 CDI 环境中,对于 Provider&lt;T&gt; 解决的任何用例,您最好改用 Instance&lt;T&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 2011-05-07
      • 2014-06-02
      • 2011-09-19
      相关资源
      最近更新 更多