JavaRush /Kurslar /All lectures for AZ purposes /Proxy Üçün Qısa Təriflər

Proxy Üçün Qısa Təriflər

All lectures for AZ purposes
Səviyyə , Dərs
Mövcuddur

Tez-tez tranzaksiya proxyləri müəyyən edərkən çox sayda oxşar proxy tərifləri ilə qarşılaşmaq olar. Əgər siz övlad binaların və daxili binaların təriflərindən istifadə etsəniz, daha təmiz və qısa proxy təriflərini əldə edə biləcəksiniz.

Əvvəlcə parent, nümunə binalara proxy üçün belə bir tərif yaradırıq:

<bean id="txProxyTemplate" abstract="true"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager" ref="transactionManager"/>
    <property name="transactionAttributes">
        <props>
            <prop key="*">PROPAGATION_REQUIRED</prop>
        </props>
    </property>
</bean>

Bu nümunə öz-özünə heç vaxt yaradılmır, bu səbəbdən natamam ola bilər. Belə sonra yaranmasına ehtiyac olan hər proxy, target proxy-nin daxili müəyyən olunması kimi bir övlad bina olacaq, çünki target özü heç vaxt istifadə edilmir. Aşağıdakı nümunədə belə bir övlad bina göstərilib:

<bean id="myService" parent="txProxyTemplate">
    <property name="target">
        <bean class="org.springframework.samples.MyServiceImpl">
        </bean>
    </property>
</bean>

Parent şablonun xassələrini yenidən müəyyən edə bilərsiniz. Aşağıdakı nümunədə biz tranzaksiya yayılma parametrlərini yenidən müəyyən edirik:

<bean id="mySpecialService" parent="txProxyTemplate">
    <property name="target">
        <bean class="org.springframework.samples.MySpecialServiceImpl">
        </bean>
    </property>
    <property name="transactionAttributes">
        <props>
            <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
            <prop key="store*">PROPAGATION_REQUIRED</prop>
        </props>
    </property>
</bean>

Qeyd edək ki, parent binanın nümunəsində biz parent binanı açıq şəkildə abstrakt olaraq qeyd etmişik, abstract atributunu true edən halda, bununla onun nümunəsinin heç vaxt yaradılmamasını təmin etmişik. Application context-lər (amma adi bina fabrikləri deyil) adətən bütün tək nümunələri öncədən yaradırlar. Buna görə də, əgər sizdə bir bina müəyyən edilməsi (parent) varsa və bunu şablon kimi istifadə etməyi düşünürsünüzsə, və bu təyin etdiyi bir sinif varsa, siz abstract atributunun true olaraq təyin edildiyindən əmin olmalısınız. Əks halda, application context həqiqətən onun nümunəsini öncədən yaratmağa çalışacaq.

ProxyFactory ilə proqram vasitəsilə AOP proxy yaratmaq

Spring ilə proqram vasitəsilə AOP proxy yaratmaq çox asandır. Bu, Spring AOP modulu ilə Spring IoC modulundan asılı olmayan bir şəkildə işləməyə imkan verəcək.

Target obyektin həyata keçirdiyi interfeyslər avtomatik olaraq proksiyalanır. Aşağıdakı listin target objekti üçün bir interceptor və bir advisor ilə proxy yaratmağı göstərir:

Java
ProxyFactory factory = new ProxyFactory(myBusinessInterfaceImpl);
factory.addAdvice(myMethodInterceptor);
factory.addAdvisor(myAdvisor);
MyBusinessInterface tb = (MyBusinessInterface) factory.getProxy();
Kotlin
val factory = ProxyFactory(myBusinessInterfaceImpl)
factory.addAdvice(myMethodInterceptor)
factory.addAdvisor(myAdvisor)
val tb = factory.proxy as MyBusinessInterface

İlk addım org.springframework.aop.framework.ProxyFactory tipində bir obyekt yaradır. Onu, əvvəlki nümunədə olduğu kimi target obyekt ilə yaratmaq olar və ya proxy olunacaq interfeysləri alternativ bir constructor-da göstərmək olar.

Siz Advice-lər (Interceptor-lar kimi xüsusi bir növ Advice olaraq), Advisor-lar və ya hər ikisini əlavə edə bilərsiniz və ProxyFactory-nin həyat dövrü boyu onları manipulyasiya edə bilərsiniz. Əgər IntroductionInterceptionAroundAdvisor əlavə etsəniz, proxy zorla əlavə interfeysləri də həyata keçirə bilər.

ProxyFactory-də həmçinin AdvisedSupport-dan miras alınan rahat metodlar var ki, müxtəlif növ Advice-ləri əlavə etməyə imkan verir, məsələn, "öncə" Advice və "istisna atma" Advice-ləri. AdvisedSupport ProxyFactoryProxyFactoryBean siniflərinin super sinifidir.

AOP proxy yaradılmasının IoC çərçivəsi ilə inteqrasiyası əksər tətbiqlərdə qabaqcıl yanaşmadır. Biz tövsiyə edirik ki, Java kodundan AOP istifadə edərək, konfiqurasiyanı xarici bir fayla çıxarın.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION