2016-09-06 13 views
0

Мне немного интересно узнать о настройке проекта.CDI инъекции бетонных зависимостей на банки

У меня есть проект, который я пытаюсь обновить.

Итак, я начинали некоторые из моих конкретных классов с помощью @Named ("") аннотации. Класс фактически расширяет абстрактный класс, который реализует интерфейс. Я хочу ввести именованный класс в класс, который не включен в эту банку. Каковы соображения, которые мне нужно учитывать при этом?

ответ

1

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

Класс фактически расширяет абстрактный класс, который реализует интерфейс.

Это не должно быть проблемой - последний экземпляр bean будет иметь тип всех классов и интерфейсов в иерархии. Не о чем беспокоиться.

Я хочу ввести именованный класс в класс, который не включен в эту банку.

Во-первых, вы можете вводить только фасоль в другую фасоль. Это означает, что ваш другой класс (который не находится в той же банке) должен стать фасолью. Для этого вы включаете CDI в другой архив и аннотируете класс с требуемой областью.

Во-вторых, другая банка должна иметь зависимость от той, которая содержит фасоль @Named, чтобы контейнер CDI мог видеть эти бобы.

И последнее, но не менее важное: убедитесь, что вы используете адекватные области применения бобы. Область действия относится к определенному контексту, и каждый из них имеет другой жизненный цикл. Так, например, @ApplicationScoped beans живут от запуска приложения до выключения, а @RequestScoped активны только при HTTP-запросе.

+0

Спасибо за ваш вклад. Вы правы, это был неопределенный вопрос. Я новичок в CDI и его возможностях. Когда вы произносите аннотацию класса с требуемым объемом, я аннотировал его с помощью аннотации Named(). Как область действия работает в контейнере CDI? Вы упоминаете AplicationScope в прямом эфире (предполагая) запуск jvm-shutdown, а RequestedScoped - для каждого HTTP-запроса. Мне нужно будет аннотировать обе бобовые? – SoftwareSavant

+0

Возможно, вам стоит взглянуть на [http://weld.cdi-spec.org/documentation/](documentation). Что касается ваших вопросов - '@ Named' не дает компоненту никакой области, его цель состоит в том, чтобы сделать это [http://docs.jboss.org/weld/reference/latest/en-US/html_single/#_el_name] (доступный из EL). Бин с только аннотацией '@ Named 'будет по умолчанию иметь область @ @ Dependent. В следующем примечании - '@ ApplicationScoped' живет с ** запуском контейнера CDI ** (точка, когда загружаются CDI и начинается магия) до его завершения. И вам не нужно комментировать бобы, если '@ Dependent' достаточно для вас (предположим, что это не так). – Siliarus

+0

Что касается того, как области действия работают в контейнере CDI - каждый из них имеет свой жизненный цикл, после которого он прекращает свое существование, и связанные с ним бобовые будут уничтожены. Например, после запроса на '@ RequestScoped' beans. Когда появится новый запрос, вы получите новый bean-компонент. Вы должны угадать, как работает '@ SessionScoped'. '@ ConversationScoped' и' @ Dependent' могут быть более сложными, и я (снова) предлагаю Weld docs для этого. Вы также можете определить свои собственные области. – Siliarus

 Смежные вопросы

  • Нет связанных вопросов^_^