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」について調べていこうと思います。