Разрешение внешних (3 -я сторона) бобов в сварке

StackOverflow https://stackoverflow.com/questions/2264758

  •  20-09-2019
  •  | 
  •  

Вопрос

Я знаю, что это все еще не совсем популярно, так как спецификация была выпущена всего несколько месяцев назад.

Я еще не «установил» сварка, я просто читаю, и по этому вопросу я хочу убедиться, что я понял этот важный момент правильно:

Разрешение бобов, которые находятся в 3-й партийных банках, достигнутых, объявив их как <alternatives> в твоей beans.xml?

Если нет, то как использовать бобы из сторонних библиотек, у которых нет beans.xml ?

Поставить банку на дорожку класса, не будет работать, если нет beans.xml в их META-INF, что вы не можете справиться с сторонними банками. (видеть Пост Гэвина Кинга на эту тему)

Это было полезно?

Решение

Зачем так сложнее думать?

Просто сделайте производительность для этих сторонних занятий.

Давайте предположим

private @Inject PdfFaxService faxService;

В вашем коде вы можете просто предоставить это методом производителя. PDFFAXService работает без сохранения состояния, поэтому мы можем с уверенностью предположить, что мы можем сделать это @ApplicationScoped:

public @Produces @ApplicationScoped PdfFaxService createFaxService() {
  return new PdfFaxService(initparameters);
}

где-то.

hth.

Другие советы

Мое понимание альтернатива заключается в том, что это альтернатива какой -либо другой реализации интерфейса, которую вы можете использовать в другой среде развертывания (например, среда тестирования). Атмосфера альтернатива Бин объявляется, аннотируя его с @Alternative.

Чтобы использовать альтернативу в данном сценарии развертывания, вы выбираете ее в <alternatives> Элемент вашего дескриптора развертывания CDI META-INF/beans.xml. Анкет Это позволит @Alternative бобы, которые отключены по умолчанию.

При включении, если контейнер находит неоднозначную зависимость для данной точки впрыска, в нем будут рассматриваться альтернативы, которые могут быть введены, и, если есть ровно, возьмите эту альтернативу.

Другими словами, альтернативы хороший способ заменить существующая реализация с другим во время развертывания. Если нет ничего, чтобы заменить, вам не нужны альтернативы, просто поместите свою банку на путь класса. Не уверен, что это был именно ваш вопрос, я сомневаюсь в концепции 3-й стороны банок.

Больше 2.1.4. Альтернативы, 4.6 Альтернативы а также 4.7. Исправление неудовлетворенных и неоднозначных зависимостей (Но я думаю, что это то, что вы читаете).

Обновлять: Чтобы ответить на ваш дополнительный вопрос.

Если нет, то как использовать бобы из сторонних библиотек, в которых нет Beans.xml

Этого не может произойти, архив бобов должен иметь bean.xml (будь пустое), как подробно описано в разделе 15.6. Упаковка и развертывание документации:

CDI не определяет какой -либо специальный архив развертывания. Вы можете упаковать бобы в банках, eJB-jars или войнах-любое место развертывания в приложении. Однако архив долженбыть "архивом бобов". Это означает, что каждый архив, содержащий бобы, должен включать в себя файл с именем beans.xml в META-INF Справочник по пути или WEB-INF каталог веб -корня (для военных архивов). Файл может быть пустым. Бобы, развернутые в архивах, у которых нет beans.xml Файл не будет доступен для использования в приложении.

Затем, чтобы исправить неудовлетворенную и неоднозначную зависимость, см. Ранее упомянутый раздел 4.7.

Обновление 2: Похоже, что использование BeforeBeanDiscovery.addAnnotatedType() Можно добавить другие классы, которые должны быть приняты во внимание во время обнаружения бобов. (BeforeBeanDiscovery это событие)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top