Биекция шва и сварка - PullRequest
       29

Биекция шва и сварка

5 голосов
/ 04 апреля 2011

Я занимаюсь разработкой приложения JAVA EE 6. Я широко использую CDI. У меня вопрос, являются ли @Inject и @Produces такими же, как @In и @Out для Seam? Аннотации @In и @Out все еще используются теперь, когда у нас есть CDI?

1 Ответ

11 голосов
/ 04 апреля 2011

Все еще аннотации @In и @Out используется сейчас, когда у нас есть CDI?

@In и @Out являются аннотациями Seam 2, поэтому они не используются в Java EE 6.

У меня вопрос, являются ли @Inject и @ Производит так же, как @In и @Out для Seam

@Inject и @Produces являются не абсолютно одинаковыми, но они примерно эквивалентны. Основное отличие состоит в том, что зависимости Java EE 6 создаются, когда требуется (управляется компонентом, который требует зависимости), тогда как в Seam 2 исключение выполнялось, как только что-то было готово к использованию где-то еще (управляется компонентом, который обеспечивает зависимость)

Взять логин как пример:

  • в Seam 2 аутентифицированный пользователь был удален в желаемую область (например, сеанс) сразу после успешного входа в систему. Сам компонент входа имел область, которая обычно соответствует сценарию использования (диалогу), но не область предоставляемой зависимости (сеанса).
  • в Java EE 6 компонент входа в сессионную область выполняет аутентификацию и сохраняет аутентифицированного пользователя в закрытом поле. Это поле затем контролируется методом производителя. Поэтому, когда другой компонент запрашивает аутентифицированного пользователя, выполняется что-то вроде этого:

      @Produces @LoggedIn User getCurrentUser() {
          return user;
       }
    

Почему это? Я слышал, вы спрашиваете ...

Причина довольно проста. Weld / Java EE 6 значительно повышает производительность благодаря возможности использования прокси (большинства) зависимостей. И это просто невозможно прокси прокси: -)

Ну, кроме этого: подход, ориентированный на спрос в Java EE 6 (запрашивайте его, когда вам это нужно), чувствует себя лучше, чем Seam 2 (создал и храните его).

...