私は少し混乱しています。@Inject
アノテーションを使用して注入するBeanまたはその@Inject
内部で使用するBeanにCDIBeanを呼び出しますか?
5 に答える
CDI Beanは、他のオブジェクトの依存関係を満たすために、CDIが自動的にインスタンス化、管理、および注入できるクラスです。ほとんどすべてのJavaクラスは、CDIによって管理および注入できます。
たとえば、PrintServletはMessageインスタンスへの依存関係を取得し、CDIランタイムによって自動的に挿入されます。
PrintServlet.java
@WebServlet("/printservlet")
public class PrintServlet extends HttpServlet {
@Inject private Message message;
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.getWriter().print(message.get());
}
}
Message.java(このクラスはCDI Beanです)
@RequestScoped
public class Message {
@Override
public String get() {
return "Hello World!";
}
}
乾杯!
CDIは、独自のコンポーネントモデルを持つCDIBeanと呼ばれる新しいBeanタイプを導入していません。
CDIは、既存のコンポーネントモデルによって定義されたマネージドBeanおよびEJBで使用できる一連のサービスを提供します。
したがって、 CDIは、コンテキストおよびその他の古い機能DIのスコープを持つCDIライフサイクルを処理する単なるBean (EJBまたはマネージドBean)です。
CDI bean
はによって管理されるBeanですCDI container
(たとえば、Weld)。
もしそうなら
@injected
-それは豆ですそれが何かかもしれ
@injects
ないなら-それも豆です。
CDIはJavaEE6で導入され、コンテナによって管理されるすべてのコンポーネントにのみ、EJBで以前に利用可能だった機能の一部を提供します。したがって、CDI Beanは、サーブレット、SOAP Webサービス、RESTful Webサービス、エンティティ、EJBなどをカバーします。
したがって、これらすべての用語をchageblyで使用できます。
- CDI Bean
- 豆
- マネージドBean
- EJB Bean
- コンテナ管理のBeanなど。
CDI bean
この用語は技術的に正しくないかもしれないと思います。マネージドBeanの 方が適切なようです。
ただし、 CDI Beanの定義としては、次のようなものが考えられます。クラスにCDIアノテーションが存在する結果として、またはアーカイブ内にファイルが存在する結果として作成および注入されたマネージドBean 。CDI Bean自体はクラスではなく、クラスのマネージドインスタンスです。beans.xml
たとえば、以下の例を見てください。
public class Logger{}
public class Producer {
@Produces
public Logger getLogger() {
return new Logger();
}
}
Logger
それ自体は単なるクラスです。プロデューサーによってインスタンス化され、コンテキストにバインドされた後、managed bean
( )になります。CDI bean
CDI Beanは、コンテナー内にのみ存在できます。コンテナは仕様を実装する必要がありますCDI
。クラスパスの一部またはすべてをスキャンして、対応するBeanを作成および管理するCDIアノテーションを探します。
スタンドアロンアプリケーションからCDI対応のコンテナを作成するのは、次のように簡単です。
WeldContainer container = new Weld().initialize();