2011-03-08 14 views
2

私はいくつかのSpringアプリケーションイベントの公開を使用しているWebアプリケーションで作業していますが、私はそれの利点が何か不思議でしたか?イベントハンドラのonApplicationEventで発生したすべてのサービスコールを作成し、イベントを公開する代わりにそのサービスを呼び出すだけではどうですか。Springアプリケーションイベントパブリッシングを使用する利点は何ですか?

答えて

7

Springのイベントパブリッシング(オブザーバパターン - http://en.wikipedia.org/wiki/Observer_pattern)を使用する利点の1つは、コンポーネントが疎結合であることです。パブリッシャとサブスクライバ間の直接結合はありません。もちろん、どちらもSpringイベントAPIに依存しますが、お互いには依存しません。これにより、他の加入者に影響を与えずに加入者を追加/削除することで、アプリケーションを拡張することができます(加入者が互いに依存しないと仮定して)。

一方、見つかったように、イベントソースと全体的な結果との間にレベルの差が生じるため、デバッグがより難しくなります。

はい、通常、イベントを直接API呼び出しで置き換えることができます。あなたが将来的にイベントが

  • 処理は、例えば、ブロッキングを防止するために、別のスレッドに渡される必要があるが発生したときに一つの独立したアクションよりも多くを取る必要があるかもしれません

    • :ときのイベントを使用すると良いフィットです電子メールを送信します(カスタムApplicationEventMulticasterを使用します)。
    • システムがイベントをどのように処理するか。 AuthorizationFailureEventは、リスナーの結果に依存しません。
    • ライブラリを作成しています(例: Spring Security、および直接API呼び出しはオプションではありません。
  • 2

    サービスコールを作成するだけではなく、他の誰かがすでにコードを書いており、それを文書化してテストしているからです。

    +1

    haha​​、あなたは最初の部分(誰かがそれを書いている)を仮定することができますが、私は最後の2つ(ドキュメンテーションとテスト)を引き受けることはできません。春の場合は – stevebot

    +0

    ? – sourcedelica

    関連する問題