7

@BypassInterceptorsSeamでプログラミングする際の注釈の使用について、コミュニティからどのようなアドバイスが得られるのでしょうか。Seamアプリケーションのパフォーマンスの向上について読んでいますが、すべての記事で、このアノテーションを追加するとパフォーマンスが向上する可能性があると必ず言及されています。私の質問は、それをどこに適用すべきかということです。「XXXを実行するコンポーネントを作成するときに安全に適用できる」という一般的なルールはあります@BypassInterceptorsか?たとえば、エンティティクラスに適用する必要がありますか?DAOはどうですか?他のみんなが何をしているのか、そしてそれを正しく適用するとどのようなパフォーマンスが向上するのかを知りたいと思います。

4

3 に答える 3

9

インターセプター機能が必要ないことが確実な場合は、@BypassInterceptorアノテーションを使用してインターセプターを無効にすることができます。機能には以下が含まれます

  • バイジェクション(@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}"/>
于 2010-09-30T01:48:29.010 に答える
3

アーサーの投稿へのフォローアップ。

経験則として、たとえば、Seamのインターセプターを使用しないメソッドで計算を行う場合、つまり、いくつかの値を計算する場合は、そのメソッドに。を付けることをお勧めし@BypassInterceptorsます。

ただし、このアノテーションを追加した後は、常に徹底的にテストしてください。最初のテストでは出てこなかったメソッドとクラスにこのアノテーションが付いていたため、奇妙なバグが発生しました。

自分が何をしているのか、または注釈が何をしているのかが正確にわからない場合は、そうするのが賢明です。

于 2010-09-30T09:32:13.163 に答える
3

このテーマに関するDanAllen(Seam in Action)の必読記事は、ここ(パート1)ここ(パート2)にあります。@BypassInterceptorsと、条件付きレンダリングなど、Seamアプリケーションのその他の多くのパフォーマンス関連の問題について説明します。

于 2010-10-05T09:42:51.530 に答える