Все еще аннотации @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 (создал и храните его).