Инжекция зависимостей с помощью @Inject in Weld (JSR-299 RI). Как найти соответствующие @Produces? - PullRequest
2 голосов
/ 04 апреля 2010

Я играл с эталонной реализацией JSR-299 «Сварка» с целью использования ее в автономном приложении, и я взглянул на документацию и восхитился магией.

У меня вопрос как найден производитель данного объекта для @ Inject'ed?

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

Что за хитрость?

Ответы [ 3 ]

4 голосов
/ 09 апреля 2010

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

0 голосов
/ 05 апреля 2010

Не знаю, но этот @Inject, частично сделанный отцом Hibernate, был наконец переработан / под влиянием SpringSource и Google. Возможно, это работает немного как Guice?

0 голосов
/ 04 апреля 2010

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

...