Spring IoC-konteyner

All lectures for UZ purposes
Daraja, Dars
Mavjud

Ushbu bobda Spring Framework'da boshqaruv inversiyasi (Inversion of Control, IoC) prinsipining amalga oshirilishi ko'rib chiqiladi. IoC shuningdek, bog'liqliklarni kiritish (DI) deb ham tanilgan. Bu jarayon, ob'ektlar o'z bog'liqliklarini (ya'ni boshqa ob'ektlar bilan ishlaydigan ob'ektlar) faqat konstruktor argumentlari, ishlab chiqarish metodi argumentlari yoki ob'ekt yaratilgandan yoki ishlab chiqarish metodi orqali qaytarilgandan so'ng o'rnatiladigan xususiyatlar orqali belgilaydigan jarayon. Keyin konteyner bularni yaratuvchi binga kiritadi. Bu jarayon, aslida, binga o'zi mas'ul bo'lish, yoki bog'liqliklarni yaratish yoki ularni joylashtirish kabi mexanizmlar yordamida boshqarishdan iborat (shu tariqa, boshqaruv inversiyasi nomi mavjud) xizmat lokatori (Service Locator) kabi mexanizmlar yordamida amalga oshiriladi.

org.springframework.beans va org.springframework.context paketlari Spring Framework IoC-konteynerining asosini tashkil etadi. BeanFactory interfeysi har qanday turdagi ob'ektlarni boshqarishga qodir bo'lgan kengaytirilgan konfiguratsiya mexanizmini taqdim etadi. ApplicationContext esa BeanFactory ning osti interfeysidir. Unda quyidagilar qo'shiladi:

  • Spring AOP funksiyalari bilan qulay integratsiya

  • Xabar resurslarini ishlov berish (internatsionalizatsiya uchun foydalanish)

  • Voqealarni nashr qilish

  • Dastur darajasiga xos kontekstlar, masalan, veb-dasturlarda foydalanish uchun WebApplicationContext.

Xulosa qilib aytadigan bo'lsak, BeanFactory konfiguratsiya bazasini va asosiy funksionallikni ta'minlaydi, ApplicationContext esa yanada aniqroq korporativ funksionallikni qo'shadi. ApplicationContext BeanFactory ning to'liq kengaytirilgan jamlanmasi va bu bobda Spring IoC-konteynerini tavsiflashda faqatgina foydalaniladi. BeanFactory ni ApplicationContext o'rniga ishlatish haqida qo'shimcha ma'lumot uchun qarang BeanFactory API.

Spring'da, sizning dasturingiz asosini tashkil qiluvchi va IoC-konteyneri tomonidan boshqariladigan ob'ektlar binlar (beans) deb ataladi. Bin (bean) - bu ob'ekt, yo'qsa, u shunchaki dasturingizdagi ko'p ob'ektlardan biri bo'ladi. Bular Spring IoC-konteyneri tomonidan boshqariladigan ob'ektlar va ularning bog'liqliklari konfiguratsiya metama'lumotlarida ko'rsatilgan.

Konteynerlar haqida qisqacha

org.springframework.context.ApplicationContext interfeysi Spring IoC-konteynerni ifodalaydi va binlarni yaratish, sozlash va ularni uyushtirish uchun mas'uldir. Konteyner, yaratish, sozlash va ularni qanday uyushtirish kerakligi haqidagi ko'rsatmalarni konfiguratsiya metama'lumotlaridan oladi. Ushbu konfiguratsiya metama'lumotlar XML, Java annotatsiyalari yoki Java kodi shaklida bo'lishi mumkin. Bu dasturning ob'ektlarini va ushbu ob'ektlar o'rtasidagi murakkab bog'liq munosabatlarni ifodalash imkonini beradi.

ApplicationContext interfeysining bir nechta amalga oshirilishi Spring bilan birga yetkazib beriladi. Mustaqil dasturlarda odatda ClassPathXmlApplicationContext yoki FileSystemXmlApplicationContext ning nusxasi yaratiladi. XML konfiguratsiya metama'lumotlarini belgilashning an'anaviy formatidir, ammo konteynerga Java annotatsiyalari yoki kodini metama'lumotlar formati sifatida ishlatish uchun ko'rsatma berishingiz mumkin, bularni qulaylik bilan o'z ichiga oladigan kichik miqdorda XML konfiguratsiyasini taqdim etib.

Ko'p hollarda Spring IoC-konteynerining bir yoki bir nechta nusxasini yaratish uchun aniqlangan foydalanuvchi kod talab qilinmaydi. Masalan, veb-dastur ssenariysida web.xml faylida sakkiz (yoki shunga yaqin) qatorli veb-diskriptor shabloni yetarli bo'ladi. Agar siz Spring Tools for Eclipse (Eclipse asosidagi rivojlantirish muhitida) foydalanayotgan bo'lsangiz, ushbu standart konfiguratsiyani bir necha marta sichqoncha yoki klaviatura bosish bilan oson yaratishingiz mumkin.

Quyidagi diagramma Spring qanday ishlashini yuqori darajada taqdim etadi. Dastur sinflarini konfiguratsiya metama'lumotlari bilan birlashtiradigan tarzda, siz ApplicationContext ni yaratish va ishga tushirishdan so'ng to'liq sozlangan va bajariladigan tizim yoki dasturga ega bo'lasiz.

Konfiguratsiya metama'lumotlari

Avvalgi diagrammada ko'rsatilgandek, Spring IoC-konteyneri konfiguratsiya metama'lumotlarining shaklidan foydalanadi. Ushbu konfiguratsiya metama'lumotlari siz, dasturchi, Spring konteyneriga qanday qilib ob'ektlarni yaratish, sozlash va uyushtirishni aytishingizning yo'lini ifodalaydi.

Konfiguratsiya metama'lumotlari odatda oddiy va intuitiv XML formatida taqdim etiladi va ushbu bobning katta qismida Spring IoC-konteynerining asosiy tushunchalarini va imkoniyatlarini tushuntirish uchun ishlatiladi.

XML asosidagi metama'lumotlar konfiguratsiya metama'lumotlarining yagona ma'qullangan shakli emas. Spring IoC-konteyneri o'zi konfiguratsiya metama'lumotlari aslida qanday yozilgan formatdan to'liq ajratilgan. Hozirgi kunda ko'pchilik ishlab chiquvchilar o'zlarining Spring dasturlari uchun Java asosidagi konfiguratsiyani tanlaydilar.

Spring konteyneri bilan boshqa metama'lumotlar shakllarini ishlatish haqida qo'shimcha ma'lumot uchun qarang:

  • Annotatsiya asosidagi konfiguratsiya: Spring 2.5 annotatsiya asosidagi konfiguratsiya metama'lumotlarini qo'llab-quvvatlashni taqdim etdi.

  • Java asosidagi konfiguratsiya: Spring 3.0 boshlab, Spring JavaConfig loyihasi tomonidan taqdim etilgan ko'p funksiyalar Spring Framework'ning asosiy qismiga aylandi. Shunday qilib, siz dasturingizdan tashqaridagi binlarni Java orqali belgilashingiz mumkin, XML-fayllar o'rniga. Ushbu yangi xususiyatlarni ishlatish uchun @Configuration, @Bean, @Import va @DependsOn annotatsiyalariga qarang.

Spring konfiguratsiyasi kamida bitta, lekin odatda bitta yoki undan ko'p binani o'z ichiga oladi, bu konteyner tomonidan boshqarilishi kerak. XML asosidagi konfiguratsiya metama'lumotlari ushbu binlarni yuqori darajadagi <beans/> elementi ichida <bean/> elementlari sifatida tuzadi. Java konfiguratsiyasida odatda @Configuration sinfida @Bean ga ega metodlar ishlatiladi.

Ushbu bin ta'riflari sizning dasturingiz asosini tashkil etuvchi haqiqiy ob'ektlarga to'g'ri keladi. Odatda, siz xizmat darajasi ob'ektlarini, ma'lumotlarga kirish ob'ektlarini (DAO), ko'rinish ob'ektlarini, masalan, Struts Action nusxalarini, infratuzilma ob'ektlar, masalan, Hibernate SessionFactories, JMS Queues ni belgilaysiz va hokazo. Odatda, domen ob'ektlari konteynerda sozlanmaydi, chunki domen ob'ektlarini yaratish va yuklash uchun odatda DAO va biznes mantiqi mas'uldir. Biroq, siz IoC-konteyneri nazoratidan tashqarida yaratilgan ob'ektlarni sozlash uchun Spring va AspectJ integratsiyasidan foydalanishingiz mumkin.

Quyidagi misolda XML asosidagi konfiguratsiya metama'lumotlarining asosiy tuzilishi ko'rsatilgan:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="..." class="...">  
        <!-- bog'liq ob'ektlar (collaborators) va bu bin uchun konfiguratsiya shu yerda -->
    </bean>
    <bean id="..." class="...">
        <!-- bog'liq ob'ektlar (collaborators) va bu bin uchun konfiguratsiya shu yerda -->
    </bean>
    <!-- boshqa bin ta'riflarini shu yerdan topishingiz mumkin -->
</beans>
  1. id atributi bir individual bin ta'rifini aniqlaydigan qatorli satr.
  2. class atributi bin turini aniqlaydi va to'liq sinf nomini ishlatadi.

Atribut id qiymati bog'liq ob'ektlarga tegishli. Ushbu misolda XML bog'liq ob'ektlarga ishorat berish uchun ko'rsatilmagan.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION