1. Bean Definition Xml and java based configurations
-qadam: pom.xml maven dependency faylini yarating
Download 68.14 Kb. Pdf ko'rish
|
5-Bean Definition, Dependency Injection
- Bu sahifa navigatsiya:
- @Component, @Repository, @Service, @Controller
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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling