一般社団法人 全国個人事業主支援協会

COLUMN コラム

こんにちは。システムエンジニアの篠原です。

要件上統一すべき処理が1箇所にまとめられているのが構造化された良いプログラムである、というのは以前にも執筆した通りですが、
最近新しく参画した既存システム刷新のプロジェクトでは、個別の機能の処理内に多数同じ処理が記述されており、あらためてそれを痛感することとなりました。
今回は、Springフレームワーク(Java)における共通処理の記載について、少し紹介させていただきます。

Springフレームワークの共通処理

Springフレームワークとしては、共通的な処理を行う部品(インターフェース)として、次のような下記のものが用意されています。

Filter

Springフレームワークの処理の前後など、柔軟に配置することができる共通処理です。ログ処理や認証系処理など、確実性を持たせたり、細かい処理をする場合はここで対応することが多いです。

Interceptor

コントローラーの処理に入る前、後、レンダリング後の3ポイントで共通処理を記述することができます。リクエスト情報に関するメソッド引数が充実しているので、一般的な共通処理はここで済ませてしまうことが多いです。

AOP

個別処理ではなく、共通的な側面や観点から捉えるプログラミングのことをAOPと呼ぶのですが、これも共通処理を記述する手段の一つです。
Spring AOPを使用しますが、メソッド引数がリクエスト情報ではなく処理先のコントローラー、サービスクラスの情報となっているため、主にログ出力に使用するのがおすすめです。

ControllerAdvice

こちらはアノテーションではありますが、全てのコントローラークラスに共通する処理を記載することができます。主にExceptionResovlerアノテーションと組み合わせて例外処理を記述する、というのが一般的な用途になると思います。

HandlerExceptionResolver

同じくエラーが発生した時に、このクラスに処理を移します。
メソッド引数が固定なので使い勝手は劣りますが、必ず例外をハンドリングをしてくれます。

その他

SimpleUrlLoginSuccessHandler, SimpleUrlLogoutSuccessHandler のようにログイン、ログアウト時のみの処理を記載できるクラスもあります(要Spring Security)。

まとめ

個別のコントローラー、サービス処理に同じような内容を記述することは避けて、こうした共通処理に向いたクラスを上手に活用していきましょう。

The following two tabs change content below.

篠原 透

2015年より企業SEとして勤務し、Javaを中心とした業務系Webアプリケーションの設計・開発・運用を経験。2019年2月に独立し、個人事業主となる。

最新記事 by 篠原 透 (全て見る)

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア