Ist es möglich, EJB-Implementierung und nicht seine Schnittstelle mit CDI zu injizieren?

8

Meine Konfiguration ist: Wildfly 8.2.0, Weld

Ist es möglich, Bean und nicht seine Schnittstelle in CDI zu injizieren?

%Vor%

BEARBEITEN :

Weitere Informationen in meiner vorherigen Frage: Stateless EJB implementiert die Schnittstelleninjektion fehlgeschlagen

    
Tony 22.12.2015, 08:23
quelle

2 Antworten

14

Ja, Sie können das, aber da EJB die Geschäftsansicht einfügt, ist die einzige Geschäftsansicht, die Sie veröffentlichen, die @Local -Ansicht, die der Standard ist, wenn Sie eine Schnittstelle implementieren ( IBean ist in Ihrem Fall eine lokale Geschäftsschnittstelle). Wenn Sie also die Bean selbst injizieren möchten, müssen Sie dem Container mitteilen, dass Sie die No-Interface-Ansicht verwenden.

Wenn Sie in Ihrem Beispiel weiterhin Ihre Schnittstelle implementieren und Bean einfügen möchten, sollten Sie die Annotation @LocalBean verwenden, was bedeutet, dass die Bean eine No-Interface-Sicht freigibt:

%Vor%

Oder: Wenn Sie keine Schnittstelle implementieren möchten, definiert die Bean standardmäßig eine No-Interface-Ansicht:

%Vor%

Siehe auch:

Tarik 22.12.2015, 13:26
quelle
2

Es sieht so aus, als hätten Sie eine unklare Antwort in Ihrer vorherigen Frage, und wirklich ist diese ganze Frage eine Folgemaßnahme zu dieser.

Im Allgemeinen ermöglicht CDI das Injizieren sowohl der Schnittstelle als auch des Impl für CDI-gesteuerte Beans. Dies ist bei EJBs nicht der Fall. Wenn ein EJB eine Schnittstelle implementiert, wird dies zu seiner Geschäftsschnittstelle. Nur die dort deklarierten Methoden sind gültig. Effektiv definiert Ihre Bean -Klasse nur, wie diese Methoden funktionieren und existiert nicht wirklich als Bean in Ihrer Laufzeitumgebung.

Also nein, wenn Sie EJBs verwenden, können Sie die Implementierung nicht injizieren, nur die Schnittstelle. Wenn Sie das wirklich wollen, würde ich von EJBs wegziehen.

    
John Ament 22.12.2015 12:46
quelle