Ответ 1
Provider<T>
- это интерфейс JSR-330, который расширяется интерфейсом CDI Instance<T>
.
Инъекция MyBean
, ваше приложение будет генерировать исключение во время запуска, если нет соответствующего bean или более одного соответствия bean.
В приложение Instance<MyBean>
, bean разрешено делегировать приложение: вы можете перебирать всех кандидатов beans и select()
тот, который вы хотите, или вызывать isUnsatisfied()
, и решить, что делать, когда нет соответствующего bean.
Для beans с областью @Dependent
вызов Instance.get()
создаст новый экземпляр для каждого вызова, и вы должны вызывать Instance.destroy(t)
для каждого такого экземпляра, когда он вам больше не нужен.
Provider
имеет только метод get()
, но не destroy()
или select()
и не поддерживает итерацию. В среде CDI для любого варианта использования, адресованного Provider<T>
, вам лучше использовать Instance<T>
.