Hozirgacha biz ProxyFactoryBean yoki shunga o'xshash bean-fabrikasini ochiq yaratishni ko'rib chiqdik.
Spring bizga "авто-прокси" bilan beanlarni avtomatik ravishda проксировать qilish imkonini beradi. Bu usul Spring'ning "bean-processor" infratuzilmasiga asoslanganki, bu har qanday bean ta'rifini container yuklayotganda o'zgartirishga imkon beradi.
Ushbu modelda siz ba'zi bir aniq bean ta'riflarini XML bean ta'rif faylingizda auto-прокси infratuzilmasini sozlash uchun o'rnatasiz. Bu avtoshinalar uchun mos bo'lgan maqsadlarni e'lon qilish imkonini beradi. ProxyFactoryBean dan foydalanishga hojat yo'q.
Buni ikki usulda qilish mumkin:
-
Joriy kontekstdagi aniq beanlarga murojaat qiluvchi auto-прокси yaratuvchisi yordamida.
-
Auto-прокси yaratishning maxsus holati, alohida ko'rib chiqishni talab qiladi: мета-данные atributlari asosida auto-прокси yaratish.
Auto-прокси bilan bean ta'riflari
Ushbu bo'limda org.springframework.aop.framework.autoproxy paket tomonidan taqdim etilgan auto-прокси yaratuvchilar ko'rib chiqiladi.
BeanNameAutoProxyCreator
BeanNameAutoProxyCreator klassi – bu BeanPostProcessor bo'lib, u harfiy qiymatlar yoki o'zgaruvchi belgilar bilan mos keladigan bean nomlari uchun avtomatik ravishda АОП прокси yaratadi. Quyidagi misol BeanNameAutoProxyCreator бинини qanday yaratishni ko'rsatadi:
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames" value="jdk*,onlyJdk"/>
<property name="interceptorNames">
<list>
<value>myInterceptor</value>
</list>
</property>
</bean>
ProxyFactoryBean dagi kabi, bu yerda interceptorNames xususiyati mavjud bo'lib, bu prototip maslahatchilari uchun to'g'ri ishlov berishni ta'minlaydi. Nomi belgilangan "перехватчики" har qanday turdagi maslahatchilar yoki maslahatlar bo'lishi mumkin.
Auto-прокси foydalanishning asosiy maqsadi BeanNameAutoProxyCreator bilan bir xil konfiguratsiyani minimal konfiguratsiya bilan bir necha ob'ektlarga ketma-ket qo'llashdan iborat. Bu bir necha ob'ektlarga deklarativ tranzaksiyalar qo'llashning ommabop usulidir.
Masalan, jdkMyBean va onlyJdk kabi nomlar bilan mos keladigan bean ta'riflari, maqsadli klass bilan oddiy bean ta'riflaridir. АОП прокси avtomatik ravishda BeanNameAutoProxyCreator yordamida yaratiladi. Shu maslahat barcha mos beanlarga qo'llaniladi. Agar maslahatchilar ( yuqoridagi misolda perexvatчик emas) ishlatilsa, turli beanlarga turli xil kesimlar qo'llanilishi mumkinligini yodda saqlang.
DefaultAdvisorAutoProxyCreator
Ko'proq umumiy, ammo juda samarali auto-прокси yaratuvchisi DefaultAdvisorAutoProxyCreator hisoblanadi. U joriy kontekstdagi mos maslahatchilarga avtomatik ravishda murojaat qiladi, авто-прокси маслахатчи bilan bean ta'rifida aniq bean nomlarini qo'shishga hojat yo'q. U BeanNameAutoProxyCreator dagi bir xil ketma-ket konfiguratsiya va takrorlanishdan qochishning afzalliklarini taqdim etadi.
Ushbu mexanizmni ishlatish quyidagilarni o'z ichiga oladi:
-
DefaultAdvisorAutoProxyCreatorbean ta'rifini belgilash. -
Xuddi shu yoki yaqin kontekstlarda har qanday sonli maslahatchilarni belgilash. E'tibor bering, bu perexvatchiklar yoki boshqa maslahatlar emas, maslahatchilar bo'lishi lozim. Bu har bir maslahatning mosligini kandidat bean ta'riflari bilan tekshirish uchun hisoblanadigan kesim bo'lishi kerakligidan kelib chiqadi.
DefaultAdvisorAutoProxyCreator har bir maslahatchida o'z ichiga olingan kesimni avtomatik hisoblaydi, qaymaslahat (agar mavjud bo'lsa) har qanday biznes-ob'ektga (masalan, businessObject1 va businessObject2 misolda) qo'llanishi kerakligini bilish uchun.
Bu har qanday sonli maslahatchilar har qanday biznes-ob'ektga avtomatik qo'llanilishi mumkinligini anglatadi. Agar maslahatchilardan hech biri biznes-ob'ekt metodlari bilan mos kelmasa, ob'ekt проксирланmacдан qoladi. Yangi бизнес-объектлар uchun bean ta'riflarini qo'shish paytida, agar kerak bo'lsa, ular avtomatik ravishda проксирланadi.
Auto-прокси dan foydalanishning afzalligi shundaki, u chaqiruvchi kod yoki bog'liqliklarga maslahat bilan ta'minlanmagan ob'ektni olish imkonini bermaydi. Ushbu ApplicationContext uchun getBean("businessObject1") chaqiruvi maqsadli бизнес-объект o'rniga АОП прокси qaytaradi. (Ilgari ko'rsatib o‘tilgan "ichki bean" yondashuvi ham ushbu afzallikni taqdim etadi).
Quyidagi misol DefaultAdvisorAutoProxyCreator beanini va ushbu bo'limda ko'rib chiqilgan boshqa elementlarni yaratadi:
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor" ref="transactionInterceptor"/>
</bean>
<bean id="customAdvisor" class="com.mycompany.MyAdvisor"/>
<bean id="businessObject1" class="com.mycompany.BusinessObject1">
<!-- Xususiyatlar qoldirilgan -->
</bean>
<bean id="businessObject2" class="com.mycompany.BusinessObject2"/>
DefaultAdvisorAutoProxyCreator agar bir nechta бизнес-объектlarga bir xil maslahatni ketma-ket qo'llash zarurati mavjud bo'lsa, juda foydalidir. Infratuzilma ta'riflari yaratilgandan so'ng, yangi бизнес-объектlarni maxsus прокси konfiguratsiyasini kiritmasdan qo'shish mumkin. Qo'shimcha maslaxatlarni (masalan, izohlash yoki ijro etishni nazorat qilish) konfiguratsiyada minimal o'zgarishlar bilan osongina qo'shishingiz mumkin.
DefaultAdvisorAutoProxyCreator filtrlarni qo'llab-quvvatlashni (nomlash konventsiyasidan foydalanish orqali faqat aniq maslahatchilar hisoblanishi uchun, bu bir necha turli xilda moslashtirilgan AdvisorAutoProxyCreator'larni bitta fabrikada ishlatishga imkon beradi) va tartibni ta'minlaydi. Maslahatchilar org.springframework.core.Ordered interfeysini amalga oshirishlari mumkin, agar bu muammo bo'lsa, to'g'ri tartibni ta'minlash uchun. Yuqoridagi misolda ishlatilgan TransactionAttributeSourceAdvisor moslashuvchan tartib qiymatiga ega. Odatda, "без упорядочение" ishlatiladi.
GO TO FULL VERSION