質問: すごく漠然となんですが質問させてください。「CDIを勉強しといて」だけ言われて、自分なりに奔走中なのですが、乱暴に?安直に言えばサーブレット&JSPの技術の延長線上にあるフレームワークのようなものと考えてよろしいのでしょうか? Eclipseから「CDI Web プロジェクト」を選択し、とりあえずサーブレットとJSPで作成したプログラムをまるごと移しただけでも普通に動くんですが、ポイントはやはりアノテーションとxmlの活用でしょうか?また、JSPファイルをXHTMLに置き換えることでしょうか? 個人的にこれまで触ったことのあるフレームワーク(Spring, Struts)と、サーブレットの技術から少しずつ色んな要素を取ってきて...でもどれにも似ていないような印象を受けました。 すいません。質問を明確にさせて頂きますと、 1JSPファイルでは「うまみ」が享受できないから、XHTMLファイルなのでしょうか?JSPではダメですか? 2Servletクラスは存在し、MVCでいうModelがBeanと呼ばれるものになったという解釈で合っていますか? 3要はサーブレット&JSPで事あるごとにスコープにせっせと入れて出してしてたものを、もっと簡単に扱えるようになるというのが(スコープ管理が)最大の利点でしょうか? どんな状況で、何をするために勉強するのかという点をお伝えできないぶん(あるいは私が無知過ぎて質問自体がおかしくて)お答えづらい部分もあるかもしれませんが、使われたことがおありの方がいらっしゃればお答え頂けますと幸いです。 よろしくお願い致します。
回答: > > 安直に言えばサーブレット&JSPの技術の延長線上にあるフレームワークのようなものと考えてよろしいのでしょうか? > > > いいえ。ですが、最初はそのような理解でもいいのかもしれません。 CDI(Contexts and Dependency Injection for the Java EE Platform)は「Java EE」という標準仕様の一つで、すごく簡単に言うと、スコープを指定したDI(依存性注入)を実現する機能の仕様のことです。 Java EEは、エンタープライズアプリケーション(≒Webアプリケーション)をJavaで開発するための機能をまとめた標準仕様集です。したがって、CDIは正確には仕様であって実体はありません。この仕様を実装すると、CDIの機能が実現できるようになります。実際にこれを実装しているのは、WildFlyに含まれているWeldなどです。 CDIはJava EE 6から採用されていますが、Java EEにはCDIの他に「DI(Dependency Injection for Java )」という仕様もあります。どちらも主目的はDIですが、管理するスコープの指定ができるあたりが大きな違いだと思います。 > > ポイントはやはりアノテーションとxmlの活用でしょうか? > > > 定義にアノテーションとxmlを利用しますが、それがポイントというわけでなく、ポイントは「DI」にあると思います。なので、まずは、DIの概念から勉強した方がいいと思います。 > > また、JSPファイルをXHTMLに置き換えることでしょうか? > > > いいえ。 CDIの仕様は、以下で確認できますが、XHTMLに置き換えるようなことは書いてありません。 > > 1JSPファイルでは「うまみ」が享受できないから、XHTMLファイルなのでしょうか?JSPではダメですか? > > > XHTMLはCDIとは直接関係無いので、いったん忘れてください。 > > 2Servletクラスは存在し、MVCでいうModelがBeanと呼ばれるものになったという解釈で合っていますか? > > > いいえ。違います。 > > 3要はサーブレット&JSPで事あるごとにスコープにせっせと入れて出してしてたものを、もっと簡単に扱えるようになるというのが(スコープ管理が)最大の利点でしょうか? > > > うーん。間違っているともいいがたいですが... 参考になりそうなページを以下に挙げてみましたので、勉強してみて下さい。 【参考】 JavaEE7をはじめよう(10) - CDIの概要 JavaEE屈指の便利機能、CDIを触ってみよう Qiita - JavaEE使い方メモ(CDI)