Saya mencoba untuk memahami javax.inject
paket dan saya tidak jelas untuk apa javax.inject.Named
anotasi itu digunakan. Javadoc tidak menjelaskan ide di baliknya.
Javadoc ada di http://download.oracle.com/javaee/6/api/javax/inject/Named.html
Saya menggunakan Spring 3.0 untuk menulis beberapa program sampel, dengan meletakkan @Named
kacang tampaknya menambahkannya ke pabrik kacang tetapi deskripsi Javadoc sangat ringan sehingga saya tidak tahu apakah itu perilaku standar atau perilaku khusus Spring.
Pertanyaan saya adalah:
- Apa perbedaan antara
@Named
dan@Qualifier
- Bagaimana Anda bisa memberi tahu sistem Runtime bahwa sebuah kelas harus dapat diinjeksi di kelas lain apa anotasi untuk itu? Setara dengan
@Component
di Spring?
Perbarui 1 ada penjelasan yang sangat baik tentang @Named
dan @Qualifier
di artikel Bagus tentang @Named
dan @Qualifier
https://dzone.com/articles/java-ee6-cdi-named-components terima kasih @xmedeko untuk menautkan ke komentar di bawah.
Jawaban:
Gunakan
@Named
untuk membedakan objek berbeda dari tipe yang sama terikat dalam lingkup yang sama.Tanpa
@Named
kualifikasi, injektor tidak akan tahu panjang mana yang harus diikat ke variabel mana.Jika Anda ingin membuat anotasi yang bertindak seperti itu
@Named
, gunakan@Qualifier
anotasi saat membuatnya.Jika Anda lihat
@Named
, itu sendiri dianotasi dengan@Qualifier
.sumber
@Named
dan@Qualifier
java.dzone.com/articles/java-ee6-cdi-named-components@Inject
bukannya Spring@Autowired
untuk menyuntikkan kacang.@Named
bukannya Spring@Component
untuk mendeklarasikan bean.Mereka JSR-330 penjelasan standar-scan dan diambil dengan cara yang sama seperti musim semi penjelasan (selama berikut ini
jar
adalah di classpath Anda)sumber
Mengenai # 2, menurut spesifikasi JSR-330:
Jadi terserah penyedia untuk menentukan objek mana yang tersedia untuk injeksi. Dalam kasus Spring, semuanya adalah Spring beans. Dan semua kelas yang dianotasi dengan anotasi JSR-330 secara otomatis ditambahkan sebagai kacang Spring saat menggunakan AnnotationConfigApplicationContext.
sumber
Peran utama anotasi @Named adalah untuk mendefinisikan kacang untuk tujuan menyelesaikan pernyataan EL dalam aplikasi, biasanya melalui resolver JSF EL. Injeksi dapat dilakukan dengan menggunakan nama tetapi ini bukanlah cara kerja injeksi dalam CDI karena CDI memberi kita cara yang lebih kaya untuk mengekspresikan titik injeksi dan biji yang akan disuntikkan ke dalamnya.
sumber