Мне было интересно, какой совет может дать мне сообщество по использованию аннотации @BypassInterceptors
при программировании с помощью Seam? Я читал о повышении производительности приложения Seam, и в каждой статье обязательно упоминается, что добавление этой аннотации может повысить производительность. У меня вопрос, где его применять? Существуют ли общие правила, которые гласят: «При написании компонента, который выполняет XXX, вы можете безопасно применять @BypassInterceptors
»? Например, следует ли применять его к своим классам сущностей? А как насчет DAO? Мне было бы очень любопытно узнать, что делают все остальные, а также какое повышение производительности вы заметили при правильном применении.
ШВ: Эффективное использование @BypassInterceptors?
Ответы (3)
Если вы уверены, что вам не нужны функции перехватчика, вы можете положиться на аннотацию @BypassInterceptor для отключения перехватчиков. Функциональность включает
- Bi-jection (@In - @Out)
- Управление транзакциями
- Обработка событий а>
И так далее...
Поскольку функциональность двунаправленного действия достигается за счет использования отражения (среда выполнения) - см., Например, этот вопрос, где вы можете понять, сколько накладных расходов на производительность может добавить отражение - этого можно избежать (помимо @BypassInterceptor), используя
• Component.getInstance (‹COMPONENT_NAME_GOES_HERE›)
• геттеры и сеттеры
Если у вас есть
@Name("personManager")
public class PersonManager {
private @In Person person;
}
<h:inputText value="#{person.name}"/>
Можно вместо @In аннотации
@Name("personManager")
public class PersonManager {
private Person person;
public Person getPerson() {return this.person;}
public void setPerson(Person person) {this.person = person;}
}
Но не забывайте (обратите внимание на его новейший атрибут значения)
<h:inputText value="#{personManager.person.name}"/>
Просто продолжение сообщения Артура.
Как правило, если, например, вы выполняете некоторые вычисления для метода, который не использует какие-либо перехватчики в Seam, то есть: вычисляете некоторые значения, тогда рекомендуется пометить этот метод с помощью @BypassInterceptors
.
Но всегда тщательно проверяйте после добавления этой аннотации. Я столкнулся со странными ошибками, потому что у меня была эта аннотация о методах и классах, которые не были обнаружены при первоначальном тестировании.
Разумнее оставить это, если вы точно не знаете, что делаете или что делает аннотация.
Обязательная к прочтению статья Дэна Аллена (Seam in Action) по этой теме находится здесь (часть 1) и здесь (часть 2). Он охватывает @BypassInterceptors и многие другие проблемы, связанные с производительностью в приложении Seam, такие как условный рендеринг.