web-dev-qa-db-ja.com

CDI Beanとは何ですか?

少し混乱しています。@Injectアノテーションを使用して注入するBeanまたは内部で@Injectを使用するBeanにCDIBeanを呼び出しますか?

17
Yashar

CDI beanは、CDI containerによって管理されるBeanです(たとえば、Weld)。

  • @injectedの場合-Beanです

  • もしそうなら@injects何か-それも豆です。

2

CDI Beansは、他のオブジェクトの依存関係を満たすために、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 導入しませんCDI Beanと呼ばれる新しいBeanタイプと独自のコンポーネントモデル。

CDI セットを提供可能なサービスの数マネージドBeanとEJBによって使用される既存のコンポーネントモデルによって定義されます。

したがって、CDIは単なるBean(EJBまたはマネージドBean)Contextおよびその他の古い機能[〜#〜] di [〜 #〜]

7
user2466922

CDIはJava EE 6で導入され、コンテナによって管理されるすべてのコンポーネントにのみEJBで以前に利用可能な機能の一部を提供します。したがって、CDI BeanはサーブレットをカバーしますSOAP Webサービス、RESTful Webサービス、エンティティ、EJBなど。

したがって、これらすべての用語を間欠的に使用できます。

  • CDI Bean
  • マネージドBean
  • EJB Bean
  • コンテナ管理のBeanなど。
3
rai.skumar

CDI beanという用語は技術的に正しくない可能性があると思います。 マネージドBeanの方が適切なようです。

ただし、CDI Beanの可能な定義は次のようになります:任意のマネージドBeanだったCDIアノテーションの存在の結果として作成および挿入されたオンクラス、またはアーカイブ内のbeans.xmlファイルの存在の結果として。 CDI Bean自体はクラスではなく、クラスのマネージドインスタンスです。

例えば以下の例を見てください。

public class Logger{}
public class Producer {

    @Produces
    public Logger getLogger() {
        return new Logger();
    }
}

Logger自体は単なるクラスです。プロデューサーによってインスタンス化され、コンテキストにバインドされた後、managed beanCDI bean)になります。

CDI Beanは、コンテナー内にのみ存在できます。 containerCDI仕様を実装する必要があります。クラスパスの一部またはすべてをスキャンして、それに基づいてCDIアノテーションを探します対応するBeanを作成および管理します。スタンドアロンアプリケーションからCDI対応コンテナを作成するのは次のように簡単です。

WeldContainer container = new Weld().initialize();
0
Marinos An