0

Spring MVC では、特定のコントローラーが呼び出される前後に作業を実行できるインターセプターを定義できます。これは、たとえば、ロギング、認証などを行うために使用できます。

カスタム インターセプタを作成したいプログラマは、HandlerInterceptorインターフェイスを実装する必要があります。このタスクを支援するために、インターフェースで指定されたすべてのメソッドのデフォルト実装を提供するHandlerInterceptorAdaptor抽象基本クラスが提供されています。したがって、前処理だけを行いたい場合はextend HandlerInterceptorAdaptor、関数@Override public boolean preHandle(...)の実装について心配する必要はありませんpostHandle

私の疑問は名前に関するものです。Adapter パターンについて私が理解していることから、インターフェイス間の構文インピーダンスの不一致を適応させます。

  1. そうですか?はいの場合、ボイラープレートの実装を提供するクラスは HandlerInterceptorDefaultImpl と呼ばれるべきですか、またはそれらの線に沿ったものですか?

  2. ここで起こっていることの別の命名法/パターンはありますか?

  3. ボイラープレート クラスが必要であるという事実は、コードの臭いであり、HandlerInterceptor インターフェースを HandlerPreInterceptor と HandlerPostInterceptor の 2 つにリファクタリングすることで取り除くことができるのでしょうか? それともやり過ぎですか?

4

1 に答える 1

1

Adapter パターンに関する GOF 本から:

Adaptee をターゲット インターフェイスに適応させるために行う作業の量は、アダプタによって異なります。操作の名前を変更するなどの単純なインターフェイスの変換から、まったく異なる一連の操作のサポートまで、さまざまな作業が可能です。Adapter が行う作業の量は、Target インターフェイスが Adaptee のインターフェイスにどの程度似ているかによって異なります。

あなたが参照している定型クラスは、スケルトン実装クラスと呼ばれます。これについては、Joshua Bloch による「Effective Java」で言及されています。本から:

エクスポートする重要な各インターフェイスに対応する抽象骨格実装クラスを提供することで、インターフェイスと抽象クラスの利点を組み合わせることができます。インターフェイスは引き続き型を定義しますが、骨格実装はそれを実装するすべての作業を取り除きます。

慣例により、スケルトン実装は AbstractInterface と呼ばれます。ここで、Interface は実装するインターフェイスの名前です。たとえば、コレクション フレームワークは、AbstractCollection、AbstractSet、AbstractList、AbstractMap の各主要なコレクション インターフェイスに対応するスケルトン実装を提供します。それらを SkeletalCollection、SkeletalSet、SkeletalList、および SkeletalMap と呼ぶことは間違いなく理にかなっていますが、Abstract 規則は現在しっかりと確立されています。

于 2012-07-08T08:07:16.957 に答える