我一直在阅读的API文档Instance<T>和Provider<T>,但是当他们应该使用它并不完全清楚。
Instance<T>
Provider<T>
以下方法之间有什么区别?
@Inject MyBean bean; @Inject Instance<MyBean> bean; @Inject Provider<MyBean> bean;
Provider<T>是由CDI接口扩展的JSR-330接口Instance<T>。
注入时MyBean,如果没有匹配的bean或一个以上的匹配bean,应用程序将在启动期间引发异常。
MyBean
注入Instance<MyBean>,Bean解析委托给应用程序:您可以遍历所有候选Bean和select()想要或调用的候选Bean,并在isUnsatisfied()没有匹配的Bean时决定要做什么。
Instance<MyBean>
select()
isUnsatisfied()
对于具有@Dependent作用域的bean ,调用Instance.get()将为每次调用创建一个新实例,并且Instance.destroy(t)在不再需要它时应为每个此类实例调用。
@Dependent
Instance.get()
Instance.destroy(t)
Provider仅有get()方法,但没有destroy()或select()并且不支持迭代。在CDI环境中,对于所解决的任何用例Provider<T>,最好使用Instance<T>。
Provider
get()
destroy()