Konteyner bina qaramliklarni quyidagicha hal qiladi:
-
ApplicationContextbarcha binlarni tasvirlaydigan konfiguratsion metadata yordamida yaratiladi va ishga tushiriladi. Konfiguratsion metadata XML, Java kod yoki annotatsiyalar yordamida berilishi mumkin. -
Har bir bina uchun uning qaramliklari propertie, konstruktor argumenti yoki statik zavod metodining argumenti sifatida ifodalanadi (agar siz oddiy konstruktor o'rniga shuni ishlatayotgan bo'lsangiz). Ushbu qaramliklar bina haqiqatan yaratishda taqdim etiladi.
-
Har bir property yoki konstruktor argumenti qiymatni o'rnatish uchun haqiqiy qiymat aniqlamasini yoki konteynerdagi boshqa binaga havolani ifodalaydi.
-
Qiymat bo'lgan har bir property yoki konstruktor argumenti, belgilangan formatdan ushbu property yoki konstruktor argumentining haqiqiy turiga o'zgartiriladi. Odatiy holda, Spring string formatidan berilgan qiymatni
int,long,String,booleanva shunga o'xshash barcha ichki turlarga o'zgartira oladi.
Spring konteyneri har bir binaning konfiguratsiyasini konteyner yaratilganda tekshiradi. Ammo, binaning o'zining propertielari bino yaratilgunga qadar o'rnatilmaydi. Singleton hajmidagi binlar va oldindan yaratilishga sozlangan binlar (odatiy) konteyner yaratilganda yaratiladi. Aks holda, bino so'rov paytida yaratiladi. Bino yaratish, potentsial ravishda, bina qaramligi grafigini yaratishga olib kelishi mumkin, chunki bino qaramliklari, uning qaramliklarining qaramliklari (va hokazo) yaratiladi va o'rnatiladi. Diqqat qiling, ushbu qaramliklarni hal qilish muammolari kech, ya'ni ta'sirlangan bin birinchi marta yaratilganda paydo bo'lishi mumkin.
Odatda, Spring'ga ishonib, har bir narsa to'g'ri amalga oshirilganiga ishonishingiz mumkin. U yuklab olish vaqtida konfiguratsiya muammolarini, masalan, mavjud bo'lmagan binlarga havolalar va tsiklik qaramliklarni aniqlaydi. Spring propertielarini belgilaydi va bin yaratilganda qaramliklarni eng keyinroq hal qiladi. Bu shuni anglatadiki, to'g'ri yuklangan Spring konteyneri keyinchalik, agar biror ob'ektni yaratishda muammo bo'lsa yoki uning qaramliklaridan biri bo'lsa, istisno yaratishi mumkin - masalan, bina yo'q yoki noto'g'ri property natijasida istisno yaratadi. Ba'zi konfiguratsion muammolarning potentsial kechikkan ko'rinishi sababli, odatiy ApplicationContext realizatsiyalari oldindan binalarni yaratadi. Ushbu binalarni haqiqatan kerak bo'lgunga qadar yaratishga vaqt va xotirani sarflab, siz ApplicationContext yaratishda konfiguratsiya muammolarini aniqlaysiz, keyinroq emas. Siz hali ham bu odatiy xatti-harakatni o'zgartirishingiz mumkin, shunda singleton binlar iloji boricha kechikib yaratiladi, iloji boricha tezroq oldindan yaratish o'rniga.
Agar tsiklik qaramliklar mavjud bo'lmasa, bitta yoki bir nechta o'zaro binlar qaram bino ichiga kiritilganda, har bir o'zaro bino to'liq kiritilgunga qadar sozlanadi. Bu shuni anglatadiki, agar A bina B binasiga bog'liq bo'lsa, Spring IoC konteyneri B binani to'liq sozlaydi, so'ng A bin uchun setterni chaqiradi. Boshqa so'zlar bilan aytganda, bino nusxasi yaratiladi (agar u oldindan yaratilgan singleton bo'lmasa), uning qaramliklari o'rnatiladi va muvofiq hayotiy tsikl metodlari (masalan, sozlangan init metod yoki InitializingBean callback metodi) chaqiriladi.
GO TO FULL VERSION