JavaRush /Kurslar /All lectures for UZ purposes /Anotatsiyalar asosida konteyner konfiguratsiyasi

Anotatsiyalar asosida konteyner konfiguratsiyasi

All lectures for UZ purposes
Daraja, Dars
Mavjud
Anotatsiyalar Spring konfiguratsiyasi uchun XML'dan yaxshiroqmi?

Anotatsiyalar asosida konfiguratsiya kiritilishi bu yondashuvning XML'dan "yaxshi" yoki yo'qligi haqidagi masalani ko'tardi. Qisqacha javob: "Bu vaziyatga bog'liq". Batafsil javob shundaki, har bir yondashuvning o'z afzalliklari va kamchiliklari mavjud, odatda ishlab chiquvchi o'zi uchun qaysi strategiya mos kelishini hal qiladi. Ularni aniqlash usuliga ko'ra, anotatsiyalar o'z ma'lumotlarida ko'p kontekstni taqdim etadi, bu esa qisqaroq va aniqroq konfiguratsiyani olish imkonini beradi. Ammo, XML komponentlarni manba kodiga teginmasdan va ularni qayta kompilyatsiya qilmasdan bog'lashda juda yaxshi ishlaydi. Ba'zi ishlab chiquvchilar bog'lash vositasi manba yaqinida bo'lishini afzal ko'rishadi, boshqalari esa annotatsiyalangan sinflar endi POJO emas deb ta'kidlashadi va bundan tashqari, konfiguratsiya markazlashtirilmaydi va uni nazorat qilish qiyinroq bo'ladi.

Tanlovdan qat'i nazar, Spring har ikkala uslubni taqdim etishi va hatto ularni birlashtirishi mumkin. Shuni ta'kidlash kerakki, JavaConfig opsiyasi tufayli, Spring maqsad komponentlarining manba kodiga tegmasdan, anotatsiyalarni invaziv bo'lmagan usulda ishlatishga imkon beradi va instrumentariya nuqtai nazaridan barcha konfiguratsiya uslublari Spring Tools Eclipse uchun tomonidan qo'llab-quvvatlanadi.

XML-ga muqobil konfiguratsiya, komponentlarni bog'lash uchun burchak qavslarida e'lonlar o'rniga bytecode metadatalariga asoslangan anotatsiyalar asosidagi konfiguratsiyadir. Binlarni bog'lash vositasini tasvirlash uchun XML o'rniga, ishlab chiquvchi konfiguratsiyani komponent sinfiga, sinf, metod yoki maydon uchun tegishli e'lonlar bilan anotatsiyalar orqali o'tkazadi. AutowiredAnnotationBeanPostProcessor misol bo'limida aytib o'tilganidek, anotatsiyalar bilan birgalikda BeanPostProcessor dan foydalanish, IoC-konteynerni Spring bilan kengaytirish uchun keng tarqalgan vositadir. Masalan, Spring 2.0da @Required anotatsiyasi yordamida kerakli xususiyatlardan majburiy foydalangan holda imkoniyat qo'shildi. Spring 2.5, umumiy yondashuvdan foydalanish Spring bilan bog'lanish kiritishni boshqarishga imkon berdi. Asosan, @Autowired anotatsiyasi "Avtomatik aniqlash va bog'lanayotgan obyektlarni bog'lash" bo'limida tasvirlangan imkoniyatlarni taqdim etadi, ammo yanada nozik nazorat va kengroq qo'llash imkoniyati bilan. Spring 2.5da, JSR-250 anotatsiyalari, masalan, @PostConstruct va @PreDestroy qo'llab-quvvatlandi. Spring 3.0da esa javax.inject paketida joylashgan JSR-330 anotatsiyalarini qo'llab-quvvatlash qo'shildi, masalan, @Inject va @Named.

Anotatsiyalar bilan bog'lanish XML orqali bog'lanishdan oldin amalga oshiriladi. Shunday qilib, XML konfiguratsiyasi ikkala yondashuv orqali xususiyatlar uchun anotatsiyalarni almashtiradi.

Odatdagidek, siz postprotsessorlarni alohida bean ta'riflari sifatida ro'yxatdan o'tkazishingiz mumkin, ammo ularni XML-konfiguratsiyasida quyidagi tegi qo'shilishi bilan aniq bo'lmagan tarzda ro'yxatdan o'tkazish mumkin (e'tibor bering, context namespacesining kiritilishiga):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
    <context:annotation-config/>
</beans>

<context:annotation-config/> quyidagi postprotsessorlarni aniq bo'lmagan holda ro'yxatdan o'tkazadi:

<context:annotation-config/> faqat o'sha ilova kontekstida aniqlangan beanlar uchun anotatsiyalarni qidiradi. Bu degani, agar siz <context:annotation-config/>ni DispatcherServlet uchun WebApplicationContextga joylashtirsangiz, u faqat controllerlaringizdagi @Autowired beanlarni tekshiradi, ammo xizmatlarda emas.

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