JavaRush /Kurslar /All lectures for UZ purposes /Прокси учун қисқа таърифлар

Прокси учун қисқа таърифлар

All lectures for UZ purposes
Daraja, Dars
Mavjud

Кўпинча транзакция проксиларида кўплаб ўхшаш таърифларни учратиш мумкин. Агар сиз ота-она ва бола боб-ларининг таърифларини, шунингдек, ички боб-ларнинг таърифларини ишлатсангиз, анча тоза ва қисқа прокси таърифларига эришишингиз мумкин.

Аввало, прокси учун шаблон боб таърифини қуйидагича яратамиз:

<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>

Ўзини ўзи яратиш мумкин бўлмаганлиги сабабли, у тўлиқ бўлмаслиги мумкин. Сўнгра, сиз яратишингиз керак бўлган ҳар бир прокси мақсадни ички боб таърифи сифатида ифодаловчи бола боб таърифи бўлади, чунки мақсад ўзи фойдаланилмайди. Қуйидаги мисолда шундай бола боб кўрсатилган:

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

Сиз ота-онанинг шаблон хоссаларини қайта белгилашингиз мумкин. Қуйидаги мисолда биз транзакция тарқалиши созламаларини қайта белгилаймиз:

<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>

Эътибор беринг, ота-она боб мисолида биз ота-она боб таърифини аниқ равишда абстракт қилиб белгиладик, abstract атрибутни true қила туриб, шунинг учун унинг нусхаси аслида хеч қачон яратилмаса. Илованинг контекстлари (лекин оддий боб фабрикалари эмас) барча нусхаларни олдиндан яратишга одатланишади. Шунинг учун, агар сиз фақат шаблон сифатида ишлатадиган боб таърифига эга бўлсангиз ва бу таърифда синфни аниқлайдиган бўлса, abstract атрибути true қилиб қўйилганини текширишингиз муҳимдир. Акс ҳолда, илова контексти аслида унинг нусхасини олдиндан яратишга ҳаракат қилади.

ProxyFactory ёрдамида дастурий тарзда AOP прокси яратиш

Spring ёрдамида дастурий тарзда AOP проксилари яратиш жуда осон. Бу сизга Spring AOP модулдан Spring IoC модулга боғлиқ бўлмасдан фойдаланиш имконини беради.

Мақсадли объект томонидан амалга ошириладиган интерфейслар автоматик равишда проксиланади. Қуйидаги мисолда бир перехватчи ва бир маслаҳатчи билан мақсадли объект учун прокси яратиш кўрсатилган:

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

Биринчи қадам – org.springframework.aop.framework.ProxyFactory туридаги объект яратиш. Буни олдингидек мақсадли объект билан ёки тилмачи интерфейслар билан алтернатив конструктор орқали амалга ошириш мумкин.

Сиз маслаҳатлар, маслаҳатчилар ёки иккаласини ҳам қўшишингиз ва уларни ProxyFactoryнинг бутун ҳаёт цикл оптималлашувида манипуляция қилиш мумкин. Агар IntroductionInterceptionAroundAdvisor қўшилса, прокси мажбурий тарзда қўшимча интерфейсларни амалга ошириши мумкин.

ProxyFactoryда AdvisedSupportдан мерос қилиб олинган қўшиш имконини берувчи қулай методлар ҳам мавжуд, масалан, "олдин" маслаҳат ва истисно генерациялаш маслаҳатлари. AdvisedSupport ProxyFactory ва ProxyFactoryBeanнинг устун синфидир.

AOP прокси яратишни IoC-челкамоқловчи модул билан интеграциялаштириш аксарият иловаларда илгари сурилган ёндошув ҳисобланади. Биз сизга AOP ёрдамида Java кодидан ташқари мекунадгиз, конфигурацияни ташқи файлга олиб чиқишингизни тавсия қиламиз.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION