1. Bean Definition Xml and java based configurations


-qadam: pom.xml maven dependency faylini yarating


Download 68.14 Kb.
Pdf ko'rish
bet2/3
Sana13.11.2023
Hajmi68.14 Kb.
#1769368
1   2   3
Bog'liq
5-Bean Definition, Dependency Injection

1-qadam: pom.xml maven dependency faylini yarating


2-qadam: Barcha Spring beanlarini bitta konfiguratsiya 
faylida aniqlang


3-qadam: Bir nechta konfiguratsiya fayllaridagi barcha 
beanlarni aniqlang va asosiy xml faylini import qiling.


4-qadam: Asosiy java faylini yarating


Java Based Configuration
Spring beanlari @Bean, @ComponentScan va @Configuration kabi
izohlar yordamida java 
konfiguratsiyasi yordamida yaratilishi mumkin.
Komponentlarni skanerlash ikki bosqichda amalga oshirilishi mumkin:
1.To`rtta izohdan birini ishlatish: @Component, @Repository, @Service, @Controller.
2.@ComponentScan da bean paketlarini o`z ichiga oladi.


1.To`rtta izohdan birini ishlatish: @Component, @Repository, @Service, @Controller.


2.@ComponentScan bean paketlarini o`z ichiga oladi


Spring Bean Scopes bizga bean misollarini yaratishni yanada batafsil nazorat qilish imkonini
beradi. Ba`zan biz bean misolini singleton sifatida yaratmoqchimiz, lekin ba`zi hollarda biz uni
har bir so`rovda yoki bir marta sessionda yaratishni xohlaymiz.
Spring bean larining besh turi mavjud :
Spring Bean Scopes 


Singleton Spring konteyneridagi default bo`yicha bean doirasi. U konteynerga har bir
konteyner uchun bean sinfining faqat bitta nusxasini yaratish va boshqarishni aytadi. Bu bitta
nusxa bunday yagona bean keshida saqlanadi va ushbu nomli bean uchun keyingi barcha
so`rovlar va havolalar uchun keshlangan nusxani qaytaradi.
Singleton
Java konfiguratsiyasidan foydalangan holda 
singleton scope bean misoli 

XML konfiguratsiyasidan foydalangan holda 
singleton scope bean misoli 



Prototype
Prototype dastur kodi bo`yicha har safar bean uchun so`rov yuborilganda yangi bean nusxasini
yaratishga olib keladi.
Prototip bean doirasining 
Java konfiguratsiyasi misoli –
Prototip fasol doirasining XML konfiguratsiyasi misoli 



Request
Request scopeda konteyner har bir HTTP so`rovi uchun yangi bean yaratadi. Shunday qilib, agar
server hozirda 50 ta so`rovni ko`rib chiqayotgan bo`lsa, konteynerda bean sinfining ko`pi bilan
50 ta alohida nusxasi bo`lishi mumkin. Har qanday holatni bitta nusxaga o`zgartirish boshqa
holatlarga ko`rinmaydi. Ushbu beanlar so`rov bajarilishi bilanoq yo`q qilinadi.
Request scope
Java konfiguratsiyasi misoli 

Request scope XML konfiguratsiyasi misoli 



Session
Session scope konteyner har bir HTTP sessiyasi uchun yangi misol yaratadi. Shunday qilib, agar serverda 20 ta faol seans
bo'lsa, konteynerda bean sinfining ko`pi bilan 20 ta alohida nusxasi bo`lishi mumkin. Bitta seans muddatidagi barcha
HTTP so`rovlari ushbu sessiya doirasidagi bitta bean misoliga kirish huquqiga ega bo`ladi.
Har qanday holatni bitta nusxaga o`zgartirish boshqa holatlarga ko`rinmaydi. Ushbu misollar serverda sessiya tugashi
bilanoq yo`q qilinadi.
Session scope
Java konfiguratsiyasi misoli 

Session scope XML konfiguratsiyasi misoli 



Global Session
Global session scope sessiya scopega o`xshaydi . Faqatgina farq shundaki, u Portlet ilovasida
qo`llaniladi. Global sessionlardan JSR-168, JSR-286 va JSR-362 portal spetsifikatsiyalari
asosida yaratilgan dastur mavjud bo`lganda foydalanish mumkin. Bitta portlet konteyneri
ostida ishlaydigan bir nechta saytlar/ilovalar bo`ladi.
Portlet konteynerlarida turli xil portletlar mavjud va ularning barchasida o`z portlet
konteksti, shuningdek portlet seansi mavjud. Portlet seanslari portlet chegarasi bilan
ishlaydi, biroq biz bir nechta saytlar o`rtasida umumiy ma`lumot almashishimiz kerak bo`lsa,
biz beanni Global Session scope bilan belgilashimiz mumkin. Spring portal ilovalari uchun
alohida portlet MVC modullariga ega.
@Bean
@Scope(value = WebApplicationContext.SCOPE_GLOBAL_SESSION, proxyMode = 
ScopedProxyMode.TARGET_CLASS)
public HelloMessageGenerator globalSessionMessage() { 
return new HelloMessageGenerator(); 
}


Spring beanning life cycle ga kirishning bir necha usullarini taqdim etadi. Misol
uchun, bean yaratilgandan so`ng, beanni yaroqli holatga keltirish uchun ba`zi ishga
tushirishni amalga oshirishingiz kerak bo`lishi mumkin. Xuddi shunday, bean
konteynerdan olib tashlanishidan oldin siz resurslarni tozalashingiz kerak bo`lishi
mumkin. Spring Framework Spring beanlarini shunday yaratadi va yo`q qiladi.
Bean Life Cycle


Bean Life Cycle


Bean Life Cycle
Quyidagi rasmda Spring beanning hayot aylanishining ikki qismi ko`rsatilgan:
Bean foydalanishga tayyor bo`lgunga qadar identifikatsiyadan keyin o`tadigan turli bosqichlarni
ko`rsatadi.
Ko`rib turganingizdek, konteyner o`z konstruktorini chaqirish orqali bean hosil qiladi va
keyin uning xususiyatlarini to`ldiradi.
Shundan so`ng, bean tayyor bo`lgunga qadar beanga bir nechta qo`ng`iroqlar keladi.


Bean Life Cycle
Konteyner yopilganda, konteyner bean yo`q qilinishidan oldin kerakli vazifalarni 
bajarishga imkon berish uchun uni chaqiradi.


Dependency Injection
Dependency Injection Spring frameworkining asosiy jihati bo`lib, u orqali Spring
konteyneri ob`ektlarni boshqa ob`ektlarga yoki "bog`liqlarga" "in`eksiya qiladi".
Oddiy qilib aytganda, bu komponentlarni ulash imkonini beradi va
komponentlarni boshqarish mas`uliyatini konteynerga o`tkazadi.
Dependency Injection bu sinflarni bir-biriga bog`lash va ularni bir biridan
mustaqil saqlash. Javaga asoslangan juda murakkab dasturni yozishda uning
sinflari boshqa Java sinflaridan iloji boricha mustaqil bo`lishi kerak. Buni amalga
oshirish uchun Spring Dependency Injectionni taqdim etadi. Dependency
Injectionni amalga oshirishning bir nechta usullari mavjud, ular bilan quyida
tanishasiz.


Dependency Injection



Dependency Injection Types


• Majburiy bog`liqliklar uchun yoki o`zgarmaslikka intilayotganda Constructor Dependency
Injectiondan foydalaning
• Ixtiyoriy yoki o`zgaruvchan bog`liqliklar uchun Setter Dependency Injectiondan foydalaning
• Ko`p hollarda Field Dependency Injectiondan saqlaning. Uning ba`zi kamchiliklari mavjud.
Dependency Injection Types


Constructor and Setter Injection


Constructor Based Injection
Constructor Based Spring Dependency Injectionga, sinf konstruktori konteyner tomonidan har biri boshqa 
sinfga bog`liq bo`lgan argumentlar soni bilan chaqirilganda erishiladi.
OR


Setter Based Injection
Spring Setter Injection - bu ob`ektga Setter usullaridan foydalangan holda bean bog`liqliklarini kiritishdan
boshqa narsa emas. Spring Constructor Injection dan farqli o`laroq , Setter Injection da ob`ekt avval
yaratiladi va keyin qaramlik kiritiladi. Spring avval beanni yaratish uchun no-argument konstruktoridan
foydalanadi va keyin bog`liqliklarni kiritish uchun setter methodlarini chaqiradi.


Field Based Injection
Bu sinf maydonga dependency injection kiritishni amalga oshirish uchun field bilan @Autowired
izohidan foydalanadi.
Ushbu turdagi bog`liqlik kiritishda Spring bog`liqliklarni to`g`ridan-to`g`ri
fieldlarga tayinlaydi. Field ineksiyasi oddiy va classni yanada o`qilishga osonroq qiladi. Biroq,
ko`p dasturchilar xavfsizlik nuqtai nazaridan field injectiondan foydalanishdan qochishadi.


@Autowired annotation
Springda @Autowired izohi bog`liqlik kiritish uchun ishlatiladi. Spring ilovasida barcha
yuklangan beanlar boshqa beanga avtomatik ulanish uchun mos keladi. Springda
@Autowired izohi beanni boshqa beanga avtomatik ulash uchun ishlatiladi. @Autowired izohi
Spring tizimida hamkorlikdagi beanlarni avtomatik ravishda ulashga yordam beradi.


@Autowired izohi Springda qaramlikni kiritish zarurligini aniq ko`rsatishning ajoyib usuli hisoblanadi. Foydali
bo`lsada, shunday holatlar mavjudki, bu @Autowired izohining o`zi Springga qaysi beanni ineksiya qilishni
tushunishi uchun yetarli emas. Agar konteynerda bir xil turdagi bir nechta bean mavjud bo`lsa,
framework 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 .
<

Download 68.14 Kb.

Do'stlaringiz bilan baham:
1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling