Я использую weld
, RI CDI как компонент инъекции зависимостей в моем веб-приложении JSF-EJB-JPA. Я вижу, что в моем проекте у нас есть пустой beans.xml в META-INF/beans.xml
в ejb.jar
и WEB-INF/beans.xml
в моей WAR. Я не понимаю, почему нам нужно оставить пустой beans.xml
, если в этом файле ничего не определено?Какова цель включения пустых beans.xml в проекты внедрения CDI?
ответ
CDI необходимо просканировать все классы архива боба при запуске и запускайте кучу событий, потому что почти любой класс автоматически управляется компонентом (читайте больше here), даже если у него нет никаких аннотаций.
Это может повлечь за собой слишком много накладных расходов, особенно для файлов jar, которые не предназначены для использования каких-либо компонентов, и поэтому полезно явно указывать, какие файлы архивов должны быть отсканированы, включая beans.xml
.
'поэтому полезно явно указать, какие файлы архивов должны быть отсканированы', я смущен в этот момент. Когда мы включаем пустой 'beans.xml', как контейнер знает, какие архивы он сканирует, чтобы создавать экземпляры для инъекций? – SRy
простое существование beans.xml является индикатором, который должен быть отсканирован архивом –
@AkselWillgert Спасибо :) @SRy Как и Aksel Willgert, контейнер выглядит специально для присутствия 'beans.xml' первым и на его основе решает, следует ли сканировать дальше в этом архиве. – rdcrng
Он используется в определенных ограниченных ситуациях
http://docs.oracle.com/javaee/6/tutorial/doc/gjbnz.html
Некоторые особенности CDI, как декораторы будут объявлены в этом файле
Это на самом деле слишком плохо, вы не можете принять более одного ответа, потому что оба rdcrng и Flo правильны. – LightGuard
@LightGuard ... Я собираюсь принять ответ на 'rdcrng'. Между тем вы отправили этот комментарий – SRy