少し混乱しています。@Inject
アノテーションを使用して注入するBeanまたは内部で@Inject
を使用するBeanにCDIBeanを呼び出しますか?
CDI bean
は、CDI container
によって管理されるBeanです(たとえば、Weld)。
@injected
の場合-Beanです
もしそうなら@injects
何か-それも豆です。
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 [〜 #〜]。
CDIはJava EE 6で導入され、コンテナによって管理されるすべてのコンポーネントにのみEJBで以前に利用可能な機能の一部を提供します。したがって、CDI BeanはサーブレットをカバーしますSOAP Webサービス、RESTful Webサービス、エンティティ、EJBなど。
したがって、これらすべての用語を間欠的に使用できます。
- CDI Bean
- 豆
- マネージドBean
- EJB Bean
- コンテナ管理のBeanなど。
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 bean
(CDI bean
)になります。
CDI Beanは、コンテナー内にのみ存在できます。 containerCDI
仕様を実装する必要があります。クラスパスの一部またはすべてをスキャンして、それに基づいてCDIアノテーションを探します対応するBeanを作成および管理します。スタンドアロンアプリケーションからCDI対応コンテナを作成するのは次のように簡単です。
WeldContainer container = new Weld().initialize();