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>
。