SE2号

調べたこと、思ったことを覚えきれなくなったので2号に記録します

JavaEE「CDI」について①

今回はJavaEEの機能であるCDIについてです。 使い方というよりは概念的なイメージを理解していくことを目的にします。

CDIとは

Contexts Dependency Injection。 「Contexts」は状況とか環境の意味です。サーバとかオブジェクトなどの状態を示しているのだとお思います。

Dependency Injection」はDIという略称で馴染みがありますね。「依存性の注入」と訳されます。

依存性の注入

「依存性の注入」って、いまいちわかりづらいですね。 DIについて調べてみると、

  • 疎結合に保つことができる
  • テストがしやすい
  • 開発効率がアップする

などなど。このうち「疎結合に保つ」というところが「依存性の注入」に関係しています。

「依存性の注入」をもう少し詳しく言うと「依存するオブジェクトを外部から何らかの形で注入する」ということになります。

依存するものとは、多くの場合「他のクラス」です。
「他のクラス」に依存されないようにする → 疎結合

簡単な例で言うと、

public void testA() {
    …
    Sample sample = new Sample();
    …
}

とすると「testA」は「Sample」に依存しています。 「sample」に設定するインスタンスを外部から設定することができれば「testA」は「Sample」への依存度が低くなります。

「外部からの注入」は、DIコンテナからでも、自力でやっても構いません。これを行うのが「DI」の考え方です。

「DI」を機能やフレームワークの意味として言うこともありますが、どちらかというと「設計方針」的なイメージの方が私はしっくりきました。

「DI」に「Contexts」を加えた機能が「CDI

この「DI」に「Contexts」の「状態」が加わると「依存するオブジェクトの状態」、つまり「ライフサイクルの管理」ができるのがCDIということになります。

CDIでどんなことができる?

CDIのメインはDIだと思いますが、DI以外にもCDIは色んな仕様を定義しています。

調べてでてきたものをあげてみませした。半分以上はわかりません。

まとめ

今回はCDIの概念的な意味、特にDIの理解について調べました。 具体的な機能は少しずつ調べていこうと思います。
まずはやっぱり「DI」ですね。 CDIの「DI」について調べていこうと思います。