■
JSUG 勉強会 「今さら聞けないDIとSpring」に参加してきました。
勉強会時のメモ程度の備忘録です。
概要
講演者
土岐 孝平 (JSUGスタッフ)
書籍
タイムテーブル
時間 | 内容 |
---|---|
19:00-19:50 | 今さら聞けないDIとSpring 前半 |
20:00-21:00 | 今さら聞けないDIとSpring 後半 |
今更聞けないDIとSpring 前半
初めに
DIを使っているが、どの部分がDIでどんなメリットがあるのかわからないという人はいないか?
SpringがDIを考えたのではなく、DIという考え方が先にあり、その考え方を利用しているのがSpringである。
DIの「D」とは?
DIのDは「Dependency:依存」 DIのDは依存するオブジェクトを指す。
クラスを作り、クラスを生成しメソッドを使用する。 オブジェクトAがオブジェクトBのメソッドを使う。
オブジェクトAにとってオブジェクトBは依存するオブジェクト
これはどういうことかというと、
オブジェクトBを先に作らなければならない。(使うには用意しなければならない)
用意するとは、newでオブジェクトを作成するということ。
依存するオブジェクトを用意する方法
オブジェクトを用意する方法は2パターンある
①使う側で自分で用意する
デメリット
-
使う側の処理が長くなり、本質ではない処理が入り込む
-
依存するオブジェクトの設定を変更したり、具象クラスを変更する場合は使う側のプログラムを修正する必要があり、 テストをするときに非常に厄介。
②使う側とは別のところで用意する。
メリット
-
使う側のプログラムがシンプルになり、本質の処理に注力できる。
-
依存するオブジェクトの設定を変更したり、具象クラスを変更する場合は使う側のプログラムを修正する必要がない
DIとは?
依存するオブジェクトを用意する部分と使う部分を分離するためのテクニック・考え方
依存するオブジェクトを、使う側のオブジェクトとは「別のところ」で作成してもらって、 参照を設定(注入)する。 自分では取りに行かず、注入してもらう。
DIの「I」とは?
Injection:注入 依存するオブジェクトを注入する。
WebアプリケーションとDI
Controller、Service、Dao、データソースを別のところで用意、注入する。 Serviceをテストする際に、MockのDaoのオブジェクトを注入してテストする。 Mockとは本物のように動く偽物のこと
DIとシングルトン
DIの仕組みだと、シングルトンが容易である。
- コネクションプールのような共有すべきデータを共有できる
- 不必要なオブジェクトの生成を避ける
留意点
全てのオブジェクトをDIするわけではない。 メソッド呼び出しのたびに作成するようなオブジェクト(フィールドで保持できないオブジェクト)はDIに適さない(EntityやDTOなど) フィールドでオブジェクトで保持するというのが基本的な考え方
今更聞けないDIとSpring 後半
SpringのDI
Springは、「別のところ」を効率よく柔軟に作成する機能を提供する。
Springの用語
- 「Bean」 -SpringのDIで作られたオブジェクトのこと
- 「コンフィグレーション」 -Beanの定義情報。どのクラスのBeanを用意する?どのBeanを注入するか?などを定義する
- 「DIコンテナ」 -Beanの入れ物。コンフィグレーションに従ってBeanを作成し、IDを割り振って管理する。IDや型を利用してBeanを取得することも可能。
コンフィグレーションの手段
XML
Springの誕生時からサポートされている
JavaConfig
Spring3.0からサポート
JavaConfigに移行しているプロジェクトが最近多い。(コンパイルエラーで知らせてくれるため)
アノテーション
Spring2.5からサポート
ステレオタイプアノテーション
コンポーネントスキャンでBeanを用意する際の目印となる。
- @Componentをベースにして、複数の種類がある。
- Beanを用意する以外に、若干の付加機能がつく。
代表的なものに、@Controller @Service @Repository
コンフィグレーションの手段
コンフィグレーションの手段が異なっても結果は同じ。 -Beanが用意される。
@Autowiredは、XMLやJavaConfigに対しても適用される。
コンフィフレーションの使い分け
業務個別のBean(Contoroller,Service,Dao)はアノテーション
-
Beanの数が増えても、メンテナンスが楽
裏方のBeanはXMLもしくはJavaConfig
DIコンテナの作成
DIコンテナの作成方法は4つある。
最後に
DIがわかれば、Springの理解力が飛躍的に上がる。
AOPがわかると、さらに理解力が上がる。