JSUG 勉強会 「今さら聞けないDIとSpring」に参加してきました。

勉強会時のメモ程度の備忘録です。

概要

JSUG勉強会 2017年その6

講演者

土岐 孝平 (JSUGスタッフ)

書籍

[改訂新版]Spring入門 ――Javaフレームワーク・より良い設計とアーキテクチャ

[改訂新版]Spring入門 ――Javaフレームワーク・より良い設計とアーキテクチャ

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

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

  • 作者: 長谷川裕一,大野渉,土岐孝平
  • 出版社/メーカー: 技術評論社
  • 発売日: 2012/11/02
  • メディア: 大型本
  • 購入: 8人 クリック: 115回
 

 

タイムテーブル

時間 内容
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からサポート

XMLで定義していたコードをJavaで定義する思想

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がわかると、さらに理解力が上がる。