NoUniqueBeanDefinitionException
ni chiqaradi
,
bu avtomatik ulanish uchun bir nechta bean
mavjudligini ko`rsatadi. Ushbu muammoning oldini olish uchun
@Qualifier
annotatsiyasidan foydalaniladi.
@Qualifier annotation
@Inject annotation
@Inject va @Autowired ikkala annotatsiya ham ilovangizda avtomatik ulanish uchun ishlatiladi.
@Inject annotatsiyasi Java 6 da joriy qilingan Java CDI ning bir qismi, @Autowired annotatsiyasi
esa Spring frameworkining bir qismidir. Ikkala izoh ham bir xil maqsadga javob beradi, shuning
uchun biz ulardan har ikkalasidan ham birdek foydalanishimiz mumkin.
@Inject
izohidan
foydalanishimiz uchun
javax.inject
kutubxonasini Gradle yoki Maven bog`liqligi sifatida e`lon
qilishimiz kerak .
<
dependency
>
<
groupId
>javax.inject
groupId
>
<
artifactId
>javax.inject
artifactId
>
<
version
>1
version
>
dependency
>
testCompile group: 'javax.inject', name: 'javax.inject', version:
'1‘
For Maven
For Gradle
@Inject annotation
№
Kalit
@Inject
@Avtomatik simli
1
Basic
(asosiy)
Bu Java CDI ning bir qismidir
Bu Spring Frameworkning bir qismidir
2
Required
(majburiy)
U talab qilinadigan atributga ega
emas
U kerakli atributga ega
3
Default
Scope
(standart)
Avtomatik beanlarning standart
scope Singleton
Injection beanning standart ko`lami prototip
hisoblanadi.
4
Ambiguity
(noaniqlik)
Agar ineksiya uchun beanlarda
noaniqlik bo`lsa, kodingizga
@Named kvalifikatori qo`shilishi
kerak.
Agar in`eksiya uchun beanlarda noaniqlik
bo`lsa, kodingizga @Qualifer kvalifikatori
qo`shilishi kerak.
5
Advantage
(afzallik)
Bu Java CDI ning bir qismi, shuning
uchun u hech qanday DI
frameworkiga bog`liq emas. Bu
sizning tizimingizni erkin bog`langan
qiladi.
Bu sizning ilovangizni Spring framework bilan
chambarchas bog`laydi. Kelajakda, agar siz
boshqa DI ramkasiga o`tmoqchi bo`lsangiz,
ilovangizni qayta sozlashingiz kerak.
@Named annotation
@Named va @Inject JSR 330 annotatsiyalari hisoblanadi va JSR 330 @Inject va
@Named bilan bog`liqlikni ta`minlaydi. JSR 330 @Named va @Inject izohlari
Springda
mos
ravishda
Springning
@Component
va
@Autowired
annotatsiyalarining ekvivalenti hisoblanadi. Sinf darajasida @Named bilan
izohlangan
bean
Spring
containeridagi
Spring
komponenti
sifatida
ishlaydi. @Inject autowires bean xuddi Spring @Autowired izohi kabi ishlaydi.
@Named annotation
@Lazy annotation
Spring framework default holatda dastur ishga tushganda barcha singleton beanlarni
ishga tushiradi va ularni dastur kontekstiga joylaydi. Biroq, ba`zi hollarda biz
beanlarni kerak bo`lganda yaratishimiz kerak, lekin dasturni ishga tushirish yoki
dastur
konteksini
yuklash
vaqtida
emas.
Bunga
biz
Springda
@Lazy annotatsiyasi yordamida erishishimiz mumkin.
Spring 3.0 dan boshlab , bean
dangasalik bilan ishga tushirilishi kerakligini ko`rsatadigan @Lazy izohi mavjud. Biz
@Lazy annotatsiyasidan bir necha usulda foydalanishimiz mumkin.
@Lazy annotation
@Resource annotation
Spring @Inject va @Named kabi JSR-330 izohlarini avtomatik ulash uchun qo`llab-quvvatlashdan
tashqari, Spring JSR-250 @Resource annotatsiyasi yordamida fieldlar yoki bean xususiyatini
sozlash usullaridan foydalangan holda ineksiyani ham qo`llab-quvvatlaydi. Springdagi
@Resource annotatsiyasi nom atributini oladi va default holatda Spring bu qiymatni ineksiya
qilinadigan bean nomi sifatida izohlaydi. Boshqacha qilib aytganda, u nom semantikasidan keyin
keladi. Agar @Resource annotatsiyasi bilan hech qanday nom ko`rsatilmagan bo`lsa, standart
nom field nomidan yoki setter usulidan olinadi.
Field bo`lsa, u field nomini oladi.
Setter usuli bo`lsa, u bean xususiyati nomini oladi.
Ammo @Resource annotatsiyasi bilan default holatda o`tish ham mavjud, agar u xuddi shu
nomdagi bean topmasa, u turga mos kelishga harakat qiladi. Shunday qilib, agar siz boshqa ikkita
izoh bilan @Autowired va @Inject bilan taqqoslanishini ko`rsangiz mumkin:
@Resource annotation
@Autowired and @Inject annotations
1.Matches by Type
2.Restricts by Qualifiers
3.Matches by Name
@Resource annotation in Spring
1.Matches by Name
2.Matches by Type
3.Restricts by Qualifiers (ignored if match is found by
name)
@Resource annotation
E`TIBORINGIZ UCHUN RAHMAT!
Dostları ilə paylaş: |