Intereting Posts
setDefaultCloseOperation вместо JFrame Пример написания оптимизированного кода путем просмотра кода компилятора встроенных classов Лучший способ вставить хорошее количество записей в hibernate Как преобразовать stream Java в скользящее окно? Почему результирующий тип разделения коротких целых чисел в Java не является коротким целым числом? Каков рекомендуемый способ получения ответа HTTP в виде строки при использовании HTTP-клиента Apache? копирование каталога из локальной системы в hdfs java code Как добавить несколько файлов application.properties в spring-boot? Почему this.next () throw java.util.ConcurrentModificationException? Чтение файла в JAR с использованием относительного пути Java: Как JVM оптимизирует вызов пустой и пустой функции? java.lang.NullPointerException в org.apache.jsp.index_jsp._jspInit Как использовать пользовательский профиль Firefox с Selenium? (Java) (и пройти окно авторизации HTML) Как нарисовать простые 3D-точки (x, y, z) в java с использованием Java3D API? Каков наилучший способ обойти тот факт, что все байты Java Java подписаны?

Когда следует использовать Instance и Provider для вставки beans в CDI?

Я читал документацию API Instance и Provider , но не совсем понятно, когда они должны использоваться.

В чем разница между следующими подходами?

 @Inject MyBean bean; 
 @Inject Instance bean; 
 @Inject Provider bean; 

Provider – это интерфейс JSR-330, который расширяется интерфейсом CDI Instance .

MyBean , ваше приложение будет генерировать исключение во время запуска, когда нет подходящего компонента или более одного соответствующего компонента.

Инъекционный Instance , разрешение в Instance делегировано приложению: вы можете перебирать все компоненты-кандидаты и select() тот, который вы хотите, или вызывать isUnsatisfied() и решить, что делать, когда нет соответствующего компонента.

Для beans с областью @Dependent вызов Instance.get() создаст новый экземпляр для каждого вызова, и вы должны вызвать Instance.destroy(t) для каждого такого экземпляра, когда он вам больше не нужен.

Provider только есть метод get() , но нет destroy() или select() и не поддерживает итерацию. В среде CDI для любого случая использования, адресованного Provider , вам лучше использовать Instance .