Spring Bean nima

All lectures for UZ purposes
Daraja , Dars
Mavjud

Spring IoC container bitta yoki bir nechta bean'larni boshqaradi. Bu bean'lar konfiguratsiya metama'lumotlari yordamida yaratiladi, siz bu ma’lumotlarni konteynerga (masalan, XML-tavsiflar shaklida <bean/>) taqdim etasiz.

O‘zi konteynerda, bu bean tavsiyalari BeanDefinition obyektlar shaklida taqdim etiladi, ular quyidagi metama'lumotlarni (boshqa ma'lumotlar orasida) o'z ichiga oladi:

  • Paket bilan to'liq klass nomi: odatda, bu ma'lum bir beanning real amalga oshirish klassi bo'ladi.

  • Beanning o'zini qanday tutishi kerakligi haqida ma'lumotlar (doirasi, hayotiy sikli kirish chaqiruvlari va hokazolar).

  • Uning ishlashi uchun kerak bo'lgan boshqa beanlarga havolalar. Bu havolalar hamkorlar (collaborators) yoki bog‘liqliklar (dependencies) deb ataladi.

  • Yangidan yaratilgan ob'ektda o'rnatilishi kerak bo'lgan boshqa konfiguratsiya parametrlari, masalan, aloqalar puli yoki aloqalarni boshqaruvchi bean'da ishlatiladigan aloqa soni kabi.

Bu metama'lumotlar har bir bean tavsifini tashkil etuvchi xususiyatlar to'plamiga o‘zgartiriladi. Quyidagi jadvalda bu xususiyatlar tavsiflanadi:

Jadval 1. Bean tavsifi
Xususiyat Qanday tushuntiriladi...

Klass

Bean yaratish

Nomi

Bean nomlash

Doirasi

Bean doiralari

Konstruktor argumentlari

Bog'liqlik kiritish

Xususiyatlar

Bog'liqlik kiritish

Avtomatik aniqlash va bog'lash rejimi

Avtomatik aniqlangan va bog'langan ob'ektlar

Kechiktirilgan ishga tushirish rejimi

Kechiktirilgan ishga tushirish bean'lari

Ishga tushirish metodi

Ishga tushirish chaqiruvlari

Yo'q qilish metodi

Yo'q qilish chaqiruvlari

ApplicationContext implementatsiyalari, aniq bean yaratish uchun ma'lumotlarni o'z ichiga oladigan bean tavsiflaridan tashqari, konteyner tashqarisida (foydalanuvchilar tomonidan) yaratilgan mavjud ob'ektlarni ham ro'yxatga olish imkonini beradi. Bu getBeanFactory() metodi orqali BeanFactory ApplicationContext'ga murojaat qilish orqali amalga oshirilishi mumkin, bu DefaultListableBeanFactory implementatsiyasini qaytaradi. DefaultListableBeanFactory bu ro'yxatga olishni registerSingleton(..) va registerBeanDefinition(..) metodlari orqali qo'llab-quvvatlaydi. Biroq, odatdagi dasturlar faqat standart bean tavsif metama'lumotlari yordamida aniqlangan bean'lar bilan ishlaydi.

Bean metama'lumotlar va qo'lda taqdim etilgan singletonlar avtomatik aniqlanish va bog'lanish va boshqa introspektsiya bosqichlarida to'g'ri ishlashi uchun imkon qadar tezroq ro'yxatga olinishi kerak. Garchi mavjud metama'lumotlar va mavjud singletonlarni qayta o'zgartirish ma'lum darajadagi qo'llab-quvvatlansa ham, vaqtida (bevosita fabrikaga kirish bilan bir vaqtning o'zida) yangi bean'larni ro'yxatga olish rasmiy ravishda qo'llab-quvvatlanmaydi va bu birgalikda kirish istisnolariga, bean konteynerida nomuvofiq holatga yoki har ikkala istisnoga olib kelishi mumkin.

Bean nomlash

Har bir bean bitta yoki bir nechta identifikatorlarga ega. Bu identifikatorlar o'zlarining joylashgan konteynerlarida noyob bo'lishlari kerak. Bean'lar odatda faqat bitta identifikatorga ega bo‘ladi. Ammo, agar bitta identifikatordan ko’proq bo‘lishi kerak bo‘lsa, qo‘shimcha identifikatorlarni taxalluslar deb hisoblash mumkin.

XML-ga asoslangan konfiguratsiya metama'lumotlarida bean identifikatorlarini belgilash uchun id atributi, name atributi yoki har ikkalasi birgalikda ishlatiladi. id atributi faqat bitta identifikator belgilash imkonini beradi. Odatda, bu ismlar harf va raqamlar ('myBean', 'someService' va hokazo) bo'ladi, lekin ular maxsus belgilarni ham o'z ichiga olishi mumkin. Agar siz bean uchun boshqa taxalluslarni kiritishni istasangiz, ularni name atributida vergul (,), nuqta-vergul (;) yoki bo'sh joy bilan ajratishingiz mumkin. Tarixga nazar tashlasak: Spring 3.1 versiyasiga qadar id atributi xsd:ID tipi sifatida belgilangan edi, bu belgilarni cheklaydi. 3.1 versiyasidan boshlab, u xsd:string tipi sifatida belgilanadi. E’tibor bering, bean id'ning noyobligi konteyner tomonidan ta'minlangan, lekin endi XML tahlilchilari tomonidan emas.

Bean uchun name yoki id belgilash shart emas. Agar siz name yoki id'ni aniq belgilamasangiz, konteyner o'sha bean uchun noyob nom yaratadi. Ammo, agar siz bu bean'ga ref elementidan foydalangan holda yoki xizmat lokatori uslubidagi qidiruv orqali nom bilan murojaat qilmoqchi bo‘lsangiz, nomni belgilashingiz kerak. Nom aniqlashdan voz kechish sabablari ichki beanlar va avtomatik aniqlangan va bog'langan ob'ektlar bilan bog'liq.

Bean nomlash qoidalari

Qoidalarga ko'ra, beanlarni nomlashda Java bitta o'zgaruvchi nomlari uchun odatiy konventsiyalar qo'llaniladi. Ya'ni, bean nomlari kichik harf bilan boshlanadi va camelCase (tug'ma) registrda davom etadi. Bunday nomlarga misol bo‘lib accountManager, accountService, userDao, loginController va boshqalar kiradi.

Beanlarni bir xilda nomlash konfiguratsiyani o‘qishni va tushunishni osonlashtiradi. Bundan tashqari, agar siz Spring'da AOP'dan foydalansangiz, u maslahatlarni (advice) bir xil nomlarga ega bo'lgan beanlar to'plamiga qo'llashda juda foydali bo'ladi.

Classpath bo’yicha komponentlarni skaner qilish orqali Spring, avvalgi qoidalarga rioya qilib, nomlangan komponentlar uchun bean nomlarini yaratadi: asosan, klassning oddiy nomi olinadi va uning boshlang‘ich belgisi kichik harfga o‘zgaradi. Ammo (g‘ayrioddiy) maxsus holatda, agar bir nechta belgilar bo‘lsa va birinchi va ikkinchi belgilar katta avvalgi yashash holati saqlanadi. Bu bu yerda Spring foydalanadigan java.beans.Introspector.decapitalize da belgilangan qoidalar bilan bir xil.

Bean'ga taxallus berish (bean tavsifidan tashqari)

Beanning o'z tavsifida bir nechta nomlarni id atributi bilan belgilangan bitta nom va name atributida boshqa ko‘plab nomlar bilan ko‘rsatishingiz mumkin. Bu nomlar bir xil bean'ning ekvivalent taxalluslari bo'lishi mumkin va ba'zi vaziyatlarda foydali bo'ladi, masalan, har bir komponent ilova ichida umumiy bog'liqlikka murojaat qilganda, bu komponent uchun o'ziga xos bean nomidan foydalanadi.

Ammo barcha taxalluslarni belgilash har doim ham yetarli emas, bunda bean aslida belgilangan. Ba’zan boshqa joyda belgilangan bean uchun taxallus kiritish kerak. Bu odatda katta tizimlarda sodir bo'ladi, bu erda konfiguratsiya har bir quyi tizim o'rtasida bo'linadi va har bir quyi tizim o'z ob'ektlari to'plamini belgilaydi. XML-ga asoslangan konfiguratsiya metama'lumotlarida buning uchun <alias/> elementidan foydalanishingiz mumkin. Quyidagi misolda buni qanday qilish kerakligi ko‘rsatilgan:

<alias name="fromName" alias="toName"/>

Bu holda fromName nomli bean (xuddi shu konteynerda) - bu taxallus aniqlanishidan so'ng - toName sifatida eslatilishi mumkin bo'ladi.

Misol uchun, A quyi tizimi uchun konfiguratsiya metama'lumotlari subsystemA-dataSource nomi ostidagi ma’lumotlar manbaisiga murojaat qilish mumkin. B quyi tizimi uchun konfiguratsiya metama'lumotlari subsystemB-dataSource nomi ostidagi manbaiga murojaat qiladi. Har ikkala quyi tizimdan foydalanuvchi asosiy ilova yaratilganda, asosiy ilova myApp-dataSource nomi ostidagi ma’lumotlar manbaisiga murojaat qiladi. Ushbu uchta nomning ham bir xil obyektga murojaat qilishini ta'minlash uchun siz konfiguratsiya metama'lumotlariga quyidagi taxallus ta’riflarini qo‘shishingiz mumkin:

<alias name="myApp-dataSource" alias="subsystemA-dataSource"/>
<alias name="myApp-dataSource" alias="subsystemB-dataSource"/>

Endi har bir komponent va asosiy ilova dataSource'ga o'ziga xos nom orqali murojaat qilishi mumkin, bu har qanday boshqa ta'rif bilan nomuvofiqlikni ta'minlamaydi (samarali ravishda nomlar maydoni yaratadi), lekin ular bitta bean'ga murojaat qilishadi.

Java konfiguratsiya

Agar siz Javakonfiguratsiyadan foydalansangiz, @Bean annotatsiyasi taxalluslarni taqdim etish uchun ishlatilishi mumkin.

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