Подтвердить что ты не робот

ProxyFactoryBean в Spring

Может кто-нибудь объяснить ProxyFactoryBean простыми словами? Я вижу, что это цитируется много мест.

4b9b3361

Ответ 1

ProxyFactoryBean используется для применения логики перехватчика к существующей целевой bean, поэтому, когда вызываются методы в этом bean, перехватчики выполняются до и после вызова этого метода. Это пример аспектно-ориентированного программирования (АОП).

Это лучше всего объяснить с помощью простого примера. Классическим вариантом использования AOP является применение кэширования к результату вызова метода. Это можно подключить с помощью ProxyFactoryBean следующим образом:

<bean id="targetService" class="com.x.MyClass"/>

<bean id="cachingInterceptor" class="com.x.MyCachingInterceptor"/>

<bean id="cachedService" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="target" ref="targetService"/>
    <property name="interfaces">
        <list>              
            <value>com.x.MyService</value>
        </list>
    </property>
    <property name="interceptorNames">
        <list>
            <value>cachingInterceptor</value>
        </list>
    </property>
</bean>

У нас есть bean targetService типа com.x.MyClass, который реализует интерфейс com.x.MyService. У нас также есть перехватчик bean, называемый cachingInterceptor, который реализует интерфейс org.aopalliance.intercept.MethodInterceptor.

В этой конфигурации будет создан новый bean, называемый cachedService, который реализует интерфейс MyService. Любые вызовы методов на этом объекте сначала передаются через метод cachingInterceptor object invoke(), который в этом случае будет искать результаты предыдущих вызовов метода во внутреннем кеше. Он либо вернул бы кешированный результат, либо разрешил вызов метода перейти к соответствующему методу на targetService.

targetService сам ничего не знает об этом, он полностью не осознает все эти события АОП.

ProxyFactoryBean сильно используется внутри Spring для создания прокси-серверов по различным причинам (например, удалению заглушек, управлению транзакциями), но он отлично подходит для использования в логике приложений.

Ответ 2

ProxyFactoryBean применяет аспекты к существующему bean. Вы начинаете с существующего bean (целевой bean), который spring "обертывает", чтобы добавить предоставленные вами аспекты. Возвращенный bean имеет тот же интерфейс, что и исходный bean, но с дополнительными аспектами, сотканными вокруг целевых методов bean.