ШОВ: Эффективное использование @BypassInterceptors? - PullRequest
7 голосов
/ 29 сентября 2010

Мне было интересно, что сообщество может дать мне по поводу использования аннотации @BypassInterceptors при программировании с помощью Seam? Я читал о повышении производительности приложений Seam, и в каждой статье обязательно упоминается, что добавление этой аннотации может повысить производительность. У меня вопрос, где это следует применять? Существуют ли общие правила, гласящие: «при написании компонента, который выполняет XXX, вы можете смело применять @BypassInterceptors»? Например, я должен применить это к своим классам сущности? А как насчет DAO? Мне было бы очень любопытно узнать, чем занимаются все остальные, а также то, какую производительность вы видите при правильном применении.

Ответы [ 3 ]

9 голосов
/ 30 сентября 2010

Если вы уверены, что вам не нужна функциональность перехватчика, вы можете положиться на аннотацию @BypassInterceptor для отключения перехватчиков. Функциональность включает в себя

И так далее ...

Поскольку функциональность двунаправленного действия достигается с помощью отражения (среды выполнения) - см., Например, этот вопрос , где вы можете иметь представление о том, сколько может добавить снижение производительности, - его можно избежать ( кроме @BypassInterceptor) с помощью

• Component.getInstance ()

• геттеры и сеттеры

Если у вас есть

@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;}

}

Но не забывайте (обратите внимание на его новейший атрибут value)

<h:inputText value="#{personManager.person.name}"/>
3 голосов
/ 05 октября 2010

Обязательно прочитайте статью Дэна Аллена (Seam in Action) на эту тему: здесь (часть 1) и здесь (часть 2) Он охватывает @BypassInterceptors и многие другие связанные с производительностью проблемы в приложении Seam, такие как условный рендеринг.

3 голосов
/ 30 сентября 2010

Просто продолжение сообщения Артура.

Как правило, если, например, вы выполняете какие-то вычисления для метода, который не использует ни одного из перехватчиков в Seam, то есть: вычисляете некоторые значения, тогда хорошо пометить этот метод @BypassInterceptors.

Но всегда тщательно проверяйте после добавления этой аннотации. У меня были странные ошибки, потому что у меня была эта аннотация к методам и классам, которые не появлялись при первоначальном тестировании.

Разумнее оставить это, если вы не знаете точно, что вы делаете или что делает аннотация.

...