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
Dostları ilə paylaş: |