About Spring Framework

憂鬱になる月曜日・・・あの有名な?アスキーアートを思い出す月曜・・・なんとか耐えた。

さて、私にとって春と言えば2つ意味があってJava使いなら、Spring Frameworkが直感的。
Spring Frameworkと言えば、避けて通れないのがDIとAOP

DI (Dependency Injection)とは。

和訳すると依存性の注入。・・・そうそう最近流行のラブ注入・・・とは違うw 依存し合うクラスの関係を外部から注入(指定)することで、ゆるい関係にしちゃうって事。ゆるい関係で得られる効果は・・・簡単に別れることができる事。プラトニックな恋愛?・・・友達以上恋人未満な関係と考えればOKかなw
微妙な比喩は置いておいて・・・例えば、LogicBean#executeメソッド内で、

    HogeAccessObject hoge = new HogeAccessObject();

なんて書いていたとする。この場合、HogeAccessObjectに変更が発生したら、呼び出し元のLogicBean#executeも変更が発生してしまう恐れがある。なので、インスタンス生成はSpringの軽量コンテナに任せちゃおうという考えがDI。ソース上はインタフェースを宣言するのみに留め、インタフェースを実装した具象クラス(この例だとHogeAccessObject)は、Springの設定ファイル(XML形式)に定義し、具象クラスのインスタンスを軽量コンテナで(ライフサイクル)管理してもらう。DIでクラスの関係性が弱くなり変更に強いアーキテクチャとなる。
でも・・・Springの設定ファイルの書きっぷりがコレ。。↓

<bean id="LogicBean" class="test.LogicBean">
    <property name="IHogeAccessObject" ref="HogeAccessObject" scope="singleton"/>
</bean>
<bean id="HogeAccessObject" class="test.HogeAccessObject"/>

どうやら面倒な気がしないでもないね。
アノテーション宣言させて、scanさせちゃえば楽かもねb

AOPAspect Oriented Programming)とは。

和訳するとアスペクト指向プログラミング。本来するべき処理とそうでない処理をモジュール分割しちゃって、開発者さんに本来すべき処理に専念してもらおうと言うことらしい。例えば、LogicBean#executeと、HogeAccessObject#execute内で、

    log.debug("execute() start"); // ログ出力部品呼び出し。
    // 本来するべき処理
    log.debug("execute() end"); // ログ出力部品呼び出し。

なんて書いていたとする。この場合、log.debug()呼び出しは本来するべき処理ではなく、システム全体を通しての共通処理と考え分離させるとする。分離後のLogicBean#executeと、HogeAccessObject#executeは、

    // 本来するべき処理

のみとなる。これは使える!・・・つづく・・・