Saya telah menemukan pertanyaan ini: Apa perbedaan antara @Inject dan @EJB tapi saya tidak mendapatkan lebih bijaksana. Saya belum pernah melakukan Java EE sebelumnya atau saya tidak punya pengalaman dengan injeksi ketergantungan jadi saya tidak mengerti apa yang harus saya gunakan?
Apakah @EJB cara lama menyuntikkan? Apakah injeksi dilakukan oleh wadah EJB saat menggunakan anotasi ini saat menggunakan @Inject menggunakan kerangka kerja CDI baru? Apakah itu bedanya dan apakah saya harus menggunakan @Inject daripada @EJB jika ini masalahnya?
sumber
@EJB
digunakan untuk injeksi sirkular (satu kacang tunggal dan satu kacang lainnya membutuhkan referensi satu sama lain)? (dengan mengacu pada jawaban saya di bawah ini - saya tidak yakin apakah saya melakukan hal yang benar dengan beralih ke@EJB
)@Inject
bisa menyuntikkan kacang apa pun, sementara@EJB
hanya bisa menyuntikkan EJB. Anda dapat menggunakan salah satu untuk menyuntikkan EJB, tapi saya lebih suka di@Inject
mana-mana.sumber
Pembaruan: Jawaban ini mungkin salah atau kedaluwarsa. Silakan lihat komentar untuk detailnya.
Saya beralih dari
@Inject
ke@EJB
karena@EJB
memungkinkan injeksi melingkar sedangkan@Inject
muntah di atasnya.Detail: Saya perlu
@PostConstruct
memanggil suatu@Asynchronous
metode tetapi akan melakukannya secara serempak. Satu-satunya cara untuk membuat panggilan asinkron adalah dengan memanggil metode asli kacang lain dan meminta metode kembali kacang asli. Untuk melakukan ini, setiap kacang memerlukan referensi yang lain - sehingga melingkar.@Inject
gagal untuk tugas ini saat@EJB
berfungsi.sumber
@Inject
mereka menjadi bidang publik masing-masing. Jika itu berhasil maka jawaban saya salah. Jika itu tidak berhasil, maka jawaban saya sejauh ini benar. Selanjutnya ubah@Inject
ke@EJB
(dan mungkin membubuhi keterangan kelas sendiri? Saya lupa.). Maka injeksi mutual siklik harus bekerja dengan baik. Itu sebabnya saya beralih dari@Inject
ke@EJB
. Semoga ini masuk akal.Berikut ini adalah diskusi yang bagus tentang topik tersebut. Gavin King merekomendasikan @Inject over @EJB untuk EJB yang bukan remote.
http://www.seamframework.org/107780.lace
atau
https://web.archive.org/web/20140812065624/http://www.seamframework.org/107780.lace
dan
sumber
Mungkin juga berguna untuk memahami perbedaan dalam hal Session Bean Identity ketika menggunakan @EJB dan @Inject. Menurut spesifikasi, kode berikut akan selalu
true
:Menggunakan @Inject alih-alih @EJB tidak ada yang sama.
lihat juga kacang sesi identitas stateless untuk info lebih lanjut
sumber
Injeksi sudah ada di Java EE 5 dengan penjelasan @Resource, @PersistentUnit atau @EJB, misalnya. Tapi itu terbatas pada sumber daya tertentu (sumber data, EJB ...) dan ke dalam komponen tertentu (Servlets, EJBs, JSF backing bean ...). Dengan CDI, Anda dapat menyuntikkan hampir semua hal di mana saja berkat anotasi @Inject.
sumber