2010-04-04 5 views
2

Я играл с реализацией справочника JSR-299 «Weld» с целью использования его в автономном приложении, и я просмотрел документацию и восхитился магией.Инъекция зависимостей с @Inject in Weld (JSR-299 RI). Как найдены соответствующие @Produces?

Мой вопрос: Как будет создан производитель данного объекта, который будет использоваться @ Inject'ed?

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

Какая уловка?

ответ

4

Путь к классам проверяется на наличие "bean-архивов". Бин-архивы - это те библиотеки, которые содержат META-INF/beans.xml. Все бобы в этих архивах автоматически регистрируются с помощью BeanManager, и их аннотации анализируются и сохраняются. Всякий раз, когда требуется производитель, менеджер бобов консультируется о подходящих производителях.

0

Я предполагаю, что он работает так же, как и в Seam: в котором путь к классам действительно сканируется. Импорт также будет искать @produce с наименьшей совпадающей областью, поэтому вы можете иметь, например, один продукт на уровне сеанса для зарегистрированных пользователей, а другой - на уровне приложений для анонимных пользователей.

0

Dunno, но этот @ частично, отложенный отцом Hibernate, был окончательно переработан/подвергнут влиянию в конце SpringSource и Google. Может быть, он немного похож на Guice?

+0

аннотация '@ Inject' была указана командой, сформированной членами Guice и Spring. Это часть другого JSR. – Bozho