見出し画像

Javaエンジニア向け 勉強配信 【Spring3入門】10年放置してた本をついに開封!!#6~DIxAOPコンテナ、AOPとは何か、Springが提供するAdvice、Proxyを利用したAOP、AOPの使いどころ~

はじめに

さあ今回も前回に引き続き、Springの学習です。

■読み進めている本はこちら↓

**Spring3入門 ――Javaフレームワーク・より良い設計とアーキテクチャ**

■元動画はこちら↓

Javaエンジニア向け 勉強配信 【Spring3入門】10年放置してた本をついに開封!!#6

※動画メインでやっており、このブログ書くのがめんどいのでchatGPTに丸投げしておりますので、ご注意ください(汗

今回は前半は割と動画の内容をまとめてくれてるけど、後半はchatGPTが独自につくちゃってる感があるかな~^^;

ってことで、動画見ていただけたら詳細に色々言っているので、詳細情報知りたい方は動画を見てくださいね!

Springフレームワーク学習ブログ:AOP(アスペクト指向プログラミング)について

1. DI×AOPコンテナ

DIとAOPの役割と関係

Springフレームワークの特徴であるDI(依存性注入)とAOP(アスペクト指向プログラミング)は、互いに補完し合う技術です。

  • DIは、部品の依存関係を管理し、システムの疎結合化を促進します。

  • AOPは、横断的関心事(ログ出力やトランザクション管理など)を分離し、オブジェクトが本来行うべき業務処理に集中できるようにします。

DIとAOPを組み合わせるメリット

DIとAOPを組み合わせることで、以下のような効果が得られます:

  • 各部品の役割が明確になり、保守性が向上

  • 共通処理を一箇所にまとめることで、コードの重複を削減

  • 横断的関心事が整理され、テストが容易になる


2. AOPとは何か

AOPの概要と目的

AOP(Aspect-Oriented Programming)は、オブジェクト指向プログラミングを補完する技術です。
本来業務ロジックに集中すべきクラスから、以下のような「横断的関心事」を分離します:

  • ログ出力

  • トランザクション管理

  • セキュリティチェック

これにより、クラスごとに特化した責務を明確化し、モジュール性を向上させます。

横断的関心事の分離

横断的関心事を一箇所にまとめることで、次のような利点があります:

  • 再利用性の向上

  • 修正箇所の特定が容易

  • 各クラスが本来の業務処理に専念できる


3. Springが提供するAdvice

Springでは、以下のようなAdvice(通知)を利用して、AOPを実現します:

  • Before Advice:対象メソッドの実行前に処理を挿入
    例)入力データの検証

  • After Advice:対象メソッドの実行後に処理を挿入
    例)処理の結果をログに記録

  • Around Advice:対象メソッドの実行前後で処理を挿入
    例)処理の実行時間を測定

  • After Returning Advice:正常終了後に処理を挿入
    例)結果に基づく追加処理

  • After Throwing Advice:例外発生時に処理を挿入
    例)エラーログの記録やリカバリ処理

これらのAdviceを適切に活用することで、コードの効率化とメンテナンス性の向上が図れます。


4. Proxyを利用したAOP

Proxyの仕組み

SpringのAOPは、Proxy(代理オブジェクト)を利用して実現されます。

  • Proxyは、対象オブジェクトの前後に処理を追加する役割を担います。

  • 対象オブジェクトを直接変更せず、横断的関心事を実現できます。

AOPを実現するためのProxyの活用

Springでは、以下の2種類のProxyを提供しています:

  • JDK Dynamic Proxy:インターフェイスを対象としたProxy

  • CGLIB Proxy:クラス全体を対象としたProxy

これにより、柔軟にAOPを適用できます。


5. AOPの使いどころ

AOPが有効な場面

AOPは、次のような場面で効果を発揮します:

  • ログ出力や例外処理などの共通処理を整理したい場合

  • トランザクション管理を一箇所にまとめたい場合

  • メソッドの実行時間を計測したい場合

AOPの導入による設計の改善

AOPを導入することで、以下の設計改善が期待できます:

  • 共通処理がクラスに埋め込まれなくなるため、コードが簡潔になる

  • 横断的関心事が集中管理され、保守性が向上する

  • 各クラスが独自の責務に集中できるようになる


6. まとめ

AOPは、業務ロジックに集中するための設計手法として非常に有効です。
SpringのAOPは、AdviceやProxyを活用し、横断的関心事を簡単に分離できます。次回は、具体的なコード例を通じて、AOPの実践方法を掘り下げたいと思います!

いいなと思ったら応援しよう!