Джейкоб Оршалик (автор Seam Framework: ознакомьтесь с эволюцией Java EE) сказал:
Outjection позволяет вам сделать переменные доступными из текущего контекста для внедрения или доступа через EL. Это может быть полезно, если вы хотите объединить несколько компонентов, которые внедряют одну и ту же переменную контекста (например, текущий пользователь, отель, который бронируется, и т. Д.). Если вы хотите избежать исключения, альтернативой является использование метода @Factory или установка значения непосредственно в контекст с помощью: Contexts.getConversationContext (). Set ("myVarName", myVar)
Еще одним преимуществом является производительность. Выдвигая значение в контекст, вы можете обойти необходимость проходить через ваш компонент, чтобы получить это значение. Это особенно применимо в случае таблиц данных с JSF (см. Это обсуждение). Но, как вы увидите в обсуждении, вы также можете использовать @BypassInterceptors для достижения того же преимущества.
Выпуск действительно удобен, но те же преимущества могут быть достигнуты другими способами. Обратите внимание, что исключение не было включено в Web Beans и будет либо устарело, либо полностью удалено в Seam 3, поэтому это еще одна причина избегать его, когда это возможно.
У нас есть приложение с множеством отклонений, и мы начали избавляться от них. Он сказал:
но те же преимущества можно достичь и другими способами.
но каковы эти другие средства? Как убрать изгибы? Например, в ASP.NET у вас есть переменные сеанса. В Seam вы можете использовать var в сеансе (в некоторых ситуациях это полезно).
Или область действия страницы: (например, в цикле jsf компонент поддержки вызывается несколько раз (иногда). У вас есть учетная запись, которая загружается из параметра страницы accountId. Вы можете загрузить учетную запись, выдать ее с областью действия страницы и вы можете широко использовать его свойства. ИЛИ (чтобы избежать использования) должен иметь метод loadAccount (), где вы берете учетную запись из БД всякий раз, когда вам это нужно ... WORST!)
Я не думаю, что:
Contexts.getConversationContext().set("myVarName", myVar)
- это способ избежать изгнания.
Это вызывает только тот же контекст, в котором сохраненная переменная сохраняется, и глубоко ее модифицирует (я думаю, это именно то, что делает @Out в фоновом режиме).
Вопрос 1: Что вы думаете, ребята, об их намерении? У вас есть конкретная информация о том, как они его заменят?
Вопрос2: Как избежать использования изгнания?
Заранее спасибо.