JavaRush /Kurslar /All lectures for UZ purposes /AspectJ uchun Springning boshqa aspektlari

AspectJ uchun Springning boshqa aspektlari

All lectures for UZ purposes
Daraja, Dars
Mavjud

@Configurable bilan belgilanadigan aspektdan tashqari, spring-aspects.jar da AspectJ uchun Spring tranzaksiyalarini boshqarish uchun ishlatilishi mumkin bo'lgan aspekt mavjud bo'lib, bu @Transactional annotatsiyasi bilan belgilanadigan tur va metodlar uchun ishlatiladi. Bu asosan Spring konteyneridan tashqarida Spring tranzaksiya qo'llab-quvvatlashini ishlatmoqchi bo'lgan foydalanuvchilar uchun mo'ljallangan.

@Transactional annotatsiyasini tarjima qiladigan aspekt - bu AnnotationTransactionAspect. Ushbu aspektdan foydalanishda siz interfeysni emas, balki implementatsiya klassini (yoki ushbu klass ichidagi metodlarni, yoki ikkalasini) belgilashingiz kerak. AspectJ interfeyslar uchun annotatsiyalar meros bo'lmasligi qoidalariga amal qiladi.

Klass uchun @Transactional annotatsiyasi, klassdagi har qanday jamoat operatsiyasini bajarish uchun standart tranzaksiya semantikasini belgilaydi.

Metod uchun klassdagi @Transactional annotatsiyasi, klass annotatsiyasi orqali belgilangan tranzaksiya semantikasini bekor qiladi (agar mavjud bo'lsa). Har qanday ko'rinishdagi metodlar annotatsiya qilinishi mumkin, shaxsiy metodlar ham kiritilgan. To'g'ridan-to'g'ri jamosiz metodlarni annotatsiya qilish - bunday metodlarni bajarish uchun tranzaksiya chegaralarini olishning yagona yo'lidir.

Spring Framework 4.2 dan boshlab, spring-aspects javax.transaction.Transactional standart annotatsiyasi uchun aynan shunday imkoniyatlarni taklif qiladigan shunga o'xshash aspektni taqdim etadi. Qo'shimcha ma'lumotlar uchun JtaAnnotationTransactionAspect bilan tanishing.

AspectJ dasturchilari uchun, Springdan konfiguratsiya va tranzaksiyalarni boshqarish qo'llab-quvvatlashini ishlatish, lekin annotatsiyalarni ishlatishni xohlamaslik (yoki qila olmaslik) uchun, spring-aspects.jar o'zlarining kesim aniqlovlarini belgilash uchun kengaytirish mumkin bo'lgan abstract aspektlarni ham taqdim etadi. Batafsil ma'lumot uchun AbstractBeanConfigurerAspect va AbstractTransactionAspect aspektlaridagi manbalar bilan tanishing. Masalan, quyidagi kod bo'lagi, to'liq aniqlangan klass nomlariga mos keladigan prototip bean aniqlovlarini ishlatib, predmeti modeli ichida aniqlangan barcha obyektlar misollarini konfiguratsiya qilish uchun qanday qilib aspekt yozishingiz mumkinligini ko'rsatadi:

public aspect DomainObjectConfiguration extends AbstractBeanConfigurerAspect {
    public DomainObjectConfiguration() {
        setBeanWiringInfoResolver(new ClassNameBeanWiringInfoResolver());
    }
    // predmet modeli ichidagi har qanday obyekt (yangi bean) yaratish
    protected pointcut beanCreation(Object beanInstance) :
        initialization(new(..)) &&
        CommonPointcuts.inDomainModel() &&
        this(beanInstance);
}

IoC bilan AspectJning aspektlarini Springda konfiguratsiya qilish

AspectJdan aspektlar Spring ilovalarida ishlatilganda, bunday aspektlarni Spring yordamida konfiguratsiya qilishni xohlash va kutish tabiiydir. Aspektlar yaratish uchun mas'ul bo'lgan AspectJ ijro muxiti bo'lib, AspectJda yaratilgan aspektlarni Spring orqali konfiguratsiyasini ta'minlash AspectJning misol yaratish modeli (expresion per-xxx) bilan bog'liq, bunda aspekt ishlatiladi.

Ko‘pgina AspectJ aspektlari - bu singlet aspektlar. Bu aspektlarni konfiguratsiya qilish juda oson. Siz odatiy tarzda aspekt turiga ishora qiladigan bean aniqlovini yaratishingiz va unga factory-method="aspectOf" bean atributini qo‘shishingiz mumkin. Bu, Spring AspectJdan aspekt misolini so'rab olishini ta'minlaydi, o'zi misol yaratmaydi. Keyingi misol factory-method="aspectOf": atributidan qanday foydalanishni ko‘rsatadi:

<bean id="profiler" class="com.xyz.profiler.Profiler"
        factory-method="aspectOf"> 
    <property name="profilingStrategy" ref="jamonProfilingStrategy"/>
</bean>
  1. factory-method="aspectOf" atributiga e'tibor bering

Singlet bo'lmagan aspektlarni konfiguratsiya qilish murakkabroq. Ammo bu AspectJ ijro muxiti tomonidan yaratilgandan so'ng aspekt misollarini konfiguratsiya qilish uchun @Configurable annotatsiyani qo'llab-quvvatlashni ishlatib prototip bean aniqlovini yaratish bilan amalga oshirilishi mumkin.

Agar ba'zi bir @AspectJ aspektlari mavjud bo'lsa, ulardan AspectJ yordamida bog'langan bo'lishingiz kerak (masalan, predmeti modelidagi tur uchun yuklash vaqtida bog'lash orqali) va boshqa @AspectJ aspektlari, ularni Spring AOPda ishlatishingiz kerak, va bularning barchasi Springda konfiguratsiya qilinishi kerak bo'lsa, unda Spring AOPdagi @AspectJ avtoprobeslov support vositasiga qaysi @AspectJ aspektlarining aniqlanishi konfiguratsiya qilish uchun ishlatilishi kerakligini ko'rsatishingiz kerak. Buni <aop:aspectj-autoproxy/> deklaratsiyasi ichida bir yoki bir nechta <include/> elementlarini ishlatish orqali amalga oshirishingiz mumkin. Har bir <include/> elementi nom shablonini belgilaydi va faqat bu shablonlarning kamida bittasiga mos keladigan beanlar Spring AOPda avtomatik proksi konfiguratsiyasi uchun ishlatiladi. Keyingi misolda <include/> elementlaridan qanday foydalanishni ko'rsatadi:

<aop:aspectj-autoproxy>
    <aop:include name="thisBean"/>
    <aop:include name="thatBean"/>
</aop:aspectj-autoproxy>
<aop:aspectj-autoproxy/> elementi nomiga aldanmang. Uning ishlatilishi Spring AOPda proksi yaratishga olib keladi. Bu holda @AspectJ uslubi aspektlarni deklaratsiya qilish uchun ishlatiladi, lekin AspectJ ijro muxiti jalb etilmagan.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION