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

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

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

Разрешение бобов, которые находятся в сторонних банках, достигнутых путем объявления их как в Вашем beans.xml?

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

Помещение банки на пути к классу не будет работать, если не будет beans.xml в их META-INF, который Вы не можете сделать верным для сторонних банок. (см. сообщение Gavin King на предмете),

6
задан skaffman 19 August 2010 в 08:48
поделиться

2 ответа

Почему вы думаете так сложно?

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

Предположим, у вас есть сторонняя библиотека, которая автоматически принимает файлы PDF и отправляет их по факсимиле, и вы хотите использовать что-то вроде

private @Inject PdfFaxService faxService;

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

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

где-нибудь.

hth.

6
ответ дан 10 December 2019 в 02:47
поделиться

Вам не нужно идти. Просто использовать;

-121--2341742-

Нет ничего плохого в том, что ID указаны в URL-адресе. Это сделано повсюду. Например:

  1. Here on Stack Overflow (/questions/ 2264708 /search-...) или
  2. Amazon ( http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/ 0735619670 /)

Всего два примера и их больше. Встраивание идентификаторов в URL почти повсеместно, особенно для больших сайтов или больших наборов данных, где сравнение последовательностей на пробках является дорогостоящим.

Это не повредит SEO вообще. Это может быть немного менее удобным для пользователя, потому что пользователи не могут «угадать» URL, но это совсем другая проблема.

-121--4817577-

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

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

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

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

Больше в 2,1,4. Альтернативы , 4,6. Альтернативы и 4,7. Исправление неудовлетворенных и неоднозначных зависимостей (но я думаю, что это то, что вы читаете).

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

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

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

CDI не определяет никаких специальных архив развертывания. Вы можете упаковывать бобы в JAR, EJB-JAR или WARs - любые расположение развертывания в приложении путь к классам. Однако архив должен быть «архивом бобов.» Это означает, что каждый архив, содержащий бобы, должен включить файл с именем beans.xml в Каталог META-INF пути к классам или WEB-INF каталог веб-корня (для ВОЕННЫЕ архивы). Возможно, файл пуст. Бобы развернуты в архивах, которые не имеют бобы.xml файл не будет доступно для использования в приложении.

Затем, чтобы исправить неудовлетворенную и неоднозначную зависимость, обратитесь к разделу 4,7, упомянутому выше.

Update 2: Похоже, что с помощью BeforeBeanDiscovery.addAnnotateType () можно добавить другие классы, которые будут учитываться при обнаружении компонентов. ( BeforeBeanDiscovery - событие)

3
ответ дан 10 December 2019 в 02:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: