Dalam bidang pembangunan Java Enterprise Edition (JEE), selalunya perlu menyuntik EJB Tanpa Kewarganegaraan ke dalam perkhidmatan web JAX-RS untuk capaian data yang cekap. Walau bagaimanapun, menghadapi EJB null dan NullPointerException yang digeruni boleh mengecewakan. Artikel ini menyelidiki punca dan menyediakan penyelesaian praktikal untuk menyelesaikan isu ini.
Percubaan awal untuk menyuntik EJB melalui anotasi mungkin tidak selalu berjaya disebabkan oleh batasan platform yang mendasari. Untuk menangani perkara ini, terdapat beberapa pendekatan yang boleh anda ambil:
SPI Penyedia Suntikan menyediakan cangkuk untuk menyesuaikan proses suntikan. Dengan melaksanakan InjectableProvider, anda boleh mengarahkan bekas itu cara menyelesaikan dan menyuntik EJB ke dalam sumber JAX-RS anda. Di bawah ialah contoh untuk pelayan Jersi:
@Provider public class EJBProvider implements InjectableProvider<EJB, Type> { // ... Implementation Details ... }
Dengan menjadikan BookResource sebagai EJB sendiri, anda memastikan bekas EJB menguruskan kitaran hayat dan suntikan dalam kelas. Ini menghapuskan keperluan untuk anotasi luaran:
@Stateless @Path("book") public class BookResource { @EJB private BookEJB bookEJB; // ... }
CDI (Konteks dan Suntikan Ketergantungan) menawarkan pendekatan yang mudah dan dikonfigurasikan secara deklaratif untuk menyuntik EJB. Dengan menggunakan anotasi @Inject, anda boleh mengakses EJB yang disuntik dengan lancar dalam sumber JAX-RS anda:
@Path("book") @RequestScoped public class BookResource { @Inject private BookEJB bookEJB; // ... }
Perlu diambil perhatian bahawa memilih pendekatan yang sesuai bergantung pada keperluan khusus dan pertimbangan reka bentuk aplikasi anda. Pilihan 1 menyediakan kawalan terperinci ke atas proses suntikan, manakala Pilihan 2 dan 3 memudahkannya dengan memanfaatkan mekanisme EJB atau CDI standard.
Atas ialah kandungan terperinci Mengapa Saya Mendapatkan EJB Null Apabila Menyuntikkannya ke dalam Perkhidmatan Web JAX-RS?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!