4
我一直在阅读Instance
和Provider
的API文档,但不清楚它们何时应该使用。什么时候应该使用Instance和Provider来注入bean?
以下方法有什么区别?
@Inject
MyBean bean;
@Inject
Instance<MyBean> bean;
@Inject
Provider<MyBean> bean;
我一直在阅读Instance
和Provider
的API文档,但不清楚它们何时应该使用。什么时候应该使用Instance和Provider来注入bean?
以下方法有什么区别?
@Inject
MyBean bean;
@Inject
Instance<MyBean> bean;
@Inject
Provider<MyBean> bean;
Provider<T>
是JSR-330接口,其是由CDI接口Instance<T>
延长。
注入MyBean
,当没有匹配的bean或多个匹配的bean时,您的应用程序将在启动过程中抛出异常。
注射Instance<MyBean>
,豆分辨率被委派到应用程序:您可以遍历所有候选豆类和select()
一个你想要的,或致电isUnsatisfied()
并决定何时没有匹配的bean做什么。
对于@Dependent
范围豆,调用Instance.get()
将创建一个新实例每次调用,你应该调用Instance.destroy(t)
为每个这样的情况下,当你不再需要它。
Provider
只是有get()
方法,但没有destroy()
或select()
并且不支持迭代。在CDI环境中,对于由Provider<T>
解决的任何用例,最好使用Instance<T>
。