2013-03-20 8 views
8

Ich bin ein wenig verwirrt, wir rufen CDI-Bean zu den Beans, die wir injizieren sie mit @inject Annotation oder die Bohnen, die wir @inject in ihnen verwenden?Was ist eine CDI-Bean?

+0

haben Sie einige Handbücher/FAQ gelesen? In welchem ​​Kontext verwenden Sie es? Haben Sie http://docs.oracle.com/javaee/6/tutorial/doc/giwhl.html gelesen? Ist dir sogar bewusst, dass dies Java-ee ist, weil ich es retagged. – cIph3r

+0

Ich spreche über Jboss Weld – Yashar

Antwort

2

CDI-Bean ist eine Bean, die vom CDI-Container verwaltet wird (zum Beispiel Weld). Also, wenn es @injected ist - es ist Bean, wenn es @ etwas einwerfen kann - es ist auch Bohne.

4

CDI führt keinen neuen Bean-Typ namens "CDI Bean" mit seinem eigenen einzigartigen Komponentenmodell ein. CDI stellt eine Reihe von Diensten bereit, die von verwalteten Beans und EJBs verwendet werden können, die durch ihre vorhandenen Komponentenmodelle definiert sind. CDI ist also nur ein Bean (EJB oder Managed Bean), der den CDI-Lebenszyklus behandelt, mit einem Spielraum für "Kontext" und andere alte Funktionen "DI".

2

CDI wurde in Java EE 6 eingeführt, um einige der Funktionen, die früher für EJB verfügbar waren, nur für alle von container verwalteten Komponenten bereitzustellen. So CDI Bean deckt Servlets, SOAP Webservice, RESTful Web-Service, Organisationen, EJBs usw.

So können Sie all diese Begriffe verwenden interchagebly: CDI Bohne, Bohnen, Managed Bean, EJB Bohne, Container Managed Bean usw.

1

CDI Bohnen sind Klassen, die CDI instanziiert, verwalten und injizieren automatisch die Abhängigkeiten von anderen Objekten zu befriedigen. Fast jede Java-Klasse kann von CDI verwaltet und injiziert werden.

Beispiel: PrintServlet hat eine Abhängigkeit von einer Message-Instanz und lässt sie automatisch von der CDI-Laufzeit injizieren.

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 (Diese Klasse ist ein CDI Bean)

@RequestScoped 
public class Message { 
    @Override 
    public String get() { 
     return "Hello World!"; 
    } 
} 

Prost!