Znalazłem to pytanie: Jaka jest różnica między @Inject a @EJB, ale nie zrozumiałem nic mądrzejszego. Nie robiłem wcześniej Java EE ani nie mam doświadczenia z wstrzykiwaniem zależności, więc nie rozumiem, czego powinienem użyć?
Czy @EJB to stary sposób wstrzykiwania? Czy wstrzyknięcie jest wykonywane przez kontener EJB podczas korzystania z tej adnotacji podczas korzystania z @Inject przy użyciu nowej struktury CDI? Czy na tym polega różnica i czy powinienem używać @Inject zamiast @EJB, jeśli tak jest?
źródło
@EJB
działa w przypadku wtrysku okrągłego (jedna fasola pojedyncza, a druga wymaga odniesienia do siebie)? (w nawiązaniu do mojej odpowiedzi poniżej - nie jestem pewien, czy robię dobrze, przechodząc na@EJB
)@Inject
może wstrzyknąć dowolną fasolę, podczas gdy@EJB
może wstrzyknąć tylko EJB. Możesz użyć albo do wstrzyknięcia EJB, ale wolałbym@Inject
wszędzie.źródło
Aktualizacja: ta odpowiedź może być nieprawidłowa lub nieaktualna. Szczegółowe informacje można znaleźć w komentarzach.
Przeszedłem z
@Inject
na@EJB
bo@EJB
pozwala na okrężne wtryski, podczas gdy@Inject
wymiotuje na to.Szczegóły: Musiałem
@PostConstruct
wywołać@Asynchronous
metodę, ale zrobiłaby to synchronicznie. Jedynym sposobem, aby wywołanie asynchroniczne było spowodowanie, aby wywołanie pierwotne było metodą innego komponentu bean i wywołało z powrotem metodę pierwotnego komponentu bean. Aby to zrobić, każda fasola potrzebowała odniesienia do drugiej - a więc okrągłej.@Inject
nie udało się wykonać tego zadania, podczas gdy@EJB
pracował.źródło
@Inject
je w swoich publicznych polach. Jeśli to zadziała, moja odpowiedź jest błędna. Jeśli to nie zadziała, moja odpowiedź jest jak dotąd poprawna. Następny Zmiana@Inject
do@EJB
(i ewentualnie opisywanie klasach siebie? Zapomnę.). Wtedy cykliczne wzajemne wtryskiwanie powinno działać dobrze. Dlatego przełączyłem się z@Inject
na@EJB
. Mam nadzieję, że to ma sens.Oto dobra dyskusja na ten temat. Gavin King zaleca @Inject over @EJB dla niezdalnych EJB.
http://www.seamframework.org/107780.lace
lub
https://web.archive.org/web/20140812065624/http://www.seamframework.org/107780.lace
i
źródło
Przydatne może być również zrozumienie różnicy w terminach tożsamości Session Bean podczas korzystania z @EJB i @Inject. Zgodnie ze specyfikacją następujący kod zawsze będzie
true
:Używanie @Inject zamiast @EJB nie jest takie samo.
Aby uzyskać więcej informacji, zobacz także tożsamość bezstanowych ziaren sesji
źródło
Na przykład iniekcja istniała już w Javie EE 5 z adnotacjami @Resource, @PersistentUnit lub @EJB. Ale było ograniczone do pewnych zasobów (źródło danych, EJB…) i do pewnych komponentów (serwlety, EJB, komponent bean JSF…). Dzięki CDI możesz wstrzyknąć prawie wszystko w dowolnym miejscu dzięki adnotacji @Inject.
źródło