【问题标题】: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
【问题描述】:
【问题讨论】:
标签:
java
jakarta-ee
dependency-injection
cdi
【解决方案1】:
Provider<T>是由CDI接口Instance<T>扩展的JSR-330接口。
注入MyBean,当没有匹配的bean或多个匹配的bean时,你的应用程序会在启动过程中抛出异常。
注入Instance<MyBean>,bean 解析被委托给应用程序:您可以遍历所有候选bean 和select() 您想要的或调用isUnsatisfied() 并决定当没有匹配的bean 时该怎么做。
对于具有@Dependent 范围的bean,调用Instance.get() 将为每次调用创建一个新实例,当您不再需要它时,您应该为每个此类实例调用Instance.destroy(t)。
Provider 只有get() 方法,但没有destroy() 或select() 并且不支持迭代。在 CDI 环境中,对于 Provider<T> 解决的任何用例,您最好改用 Instance<T>。