小编典典

何时应该实例 和提供者 用于在CDI中注入豆子?

java

我一直在阅读的API文档Instance<T>Provider<T>,但是当他们应该使用它并不完全清楚。

以下方法之间有什么区别?

@Inject
MyBean bean;



@Inject
Instance<MyBean> bean;



@Inject
Provider<MyBean> bean;

阅读 156

收藏
2020-11-16

共1个答案

小编典典

Provider<T>是由CDI接口扩展的JSR-330接口Instance<T>

注入时MyBean,如果没有匹配的bean或一个以上的匹配bean,应用程序将在启动期间引发异常。

注入Instance<MyBean>,Bean解析委托给应用程序:您可以遍历所有候选Bean和select()想要或调用的候选Bean,并在isUnsatisfied()没有匹配的Bean时决定要做什么。

对于具有@Dependent作用域的bean
,调用Instance.get()将为每次调用创建一个新实例,并且Instance.destroy(t)在不再需要它时应为每个此类实例调用。

Provider仅有get()方法,但没有destroy()select()并且不支持迭代。在CDI环境中,对于所解决的任何用例Provider<T>,最好使用Instance<T>

2020-11-16