背景:アプリケーションのビジネスロジックが複雑化している。
一. Springの概要
- Springは軽量でオープンソースのフレームワークであり、以前のEJB(重い)に代わるものです。Springはコンテナフレームワークであり、主にIoCとAOPの概念を実装しています。
- Springのコアコンポーネント:
(1) AOP:アスペクト指向プログラミングで、機能拡張は元のコードを変更することなく実現されます。
(2) IoC:制御の反転で、オブジェクトの作成はnewを使用せず、Springの設定によって行われます。
- Springはワンストップのフレームワークです。
(1) JavaEEの3層構造(MVC)において、各層に異なる解決技術を提供します。
Web層:Spring MVC
Service層:SpringのIoC
DAO層:SpringのJdbcTemplate
二. Springの役割
依存関係の低下
アプリケーション間の依存関係
クラス同士の依存
メソッド同士の依存
解除:アプリケーション間の依存関係を低下させる
実際の開発では、コンパイル時に依存せず、実行時に依存する。
解除のアプローチ:
リフレクションを使ってオブジェクトを作成し、直接newを使わない
コンフィギュレーションファイルを使って、作成するオブジェクトの完全修飾クラス名を取得する
ファクトリパターンを使ってオブジェクトを取得する
開発では、依存関係を完全に削除することは不可能であり、それらの依存関係を低下させることが目的です。
三. Springのアノテーション
- Beanオブジェクトを管理する
@Repository
@Service
@Controller
@Component
- Beanオブジェクトの依存関係を管理する
@Autowired
@Resource
-
@Autowiredと@Resourceの違い
-
- ResourceはJDKに含まれるアノテーションであり、Springフレームワークのものではありません。一方、@AutowiredはSpringのアノテーションです。
-
@Autowiredと@Resourceはどちらも型と名前で注入できます。
-
@Resourceはより柔軟で、nameやtype属性でBeanの名前と型を指定できます。
-
@Autowiredはrequiredをfalseに設定することで、必須でない属性を注入できます。
AOPの思想
これは新しいプログラミングの思想であり、OOP(オブジェクト指向プログラミング)の補完です。
-
- 手続き型
- オブジェクト指向
- アスペクト指向プログラミング(AOP)
- 関数指向
- コンポーネント指向
応用例
権限検証(インターセプタ)
単体テスト
トランザクション管理
操作ログの記録機能(ユーザーがいつ何を実行したかを記録)
アスペクト指向のアプローチ
プログラム実行中に、AOPの設定に基づき、非コアな業務ロジックのコードをメソッドの開始・終了または全体に動的に挿入するプログラミングの思想です。
設定方法
- アノテーションによる設定
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
- XMLによる設定
<!--AOPの切面を設定-->
<aop:config>
<!--ポイントカットを設定 id:ポイントカットに名前を付ける、切面を設定するときに必要-->
<aop:pointcut id="pointOne" expression="execution(* com.sc.aop.UserDao.*(..))"></aop:pointcut>
<!--<aop:pointcut id="pointOne" expression="execution(public void com.sc.aop.UserDao.*(String))"></aop:pointcut>-->
<!--切面を設定-->
<aop:aspect ref="writeLog">
<aop:before method="wr" pointcut-ref="pointOne"></aop:before>
</aop:aspect>
</aop:config>
5つの通知
@Before 前置通知
@After 後置通知
@AfterReturning 戻り値通知
@AfterThrowing 例外通知
@Around 環境通知