21

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

4

5 に答える 5

13

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!";
    }
}

乾杯!

于 2017-05-03T08:42:07.070 に答える
7

CDIは、独自のコンポーネントモデルを持つCDIBeanと呼ばれる新しいBeanタイプを導入していません。

CDIは、既存のコンポーネントモデルによって定義されたマネージドBeanおよびEJBで使用できる一連のサービスを提供します。

したがって、 CDIは、コンテキストおよびその他の古い機能DIのスコープを持つCDIライフサイクルを処理する単なるBean (EJBまたはマネージドBean)です。

于 2013-08-28T21:18:09.410 に答える
5

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

  • もしそうなら@injected-それは豆です

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

于 2013-03-20T10:10:13.553 に答える
3

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

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

  • CDI Bean
  • マネージドBean
  • EJB Bean
  • コンテナ管理のBeanなど。
于 2015-02-24T12:04:19.467 に答える
2

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();
于 2019-11-12T16:33:20.730 に答える