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