有人可以简单地解释ProxyFactoryBean吗?

我看到很多地方都引用了它。

最佳答案

ProxyFactoryBean用于将拦截器逻辑应用于现有的目标bean,以便在调用该bean上的方法时,拦截器在该方法调用之前和之后执行。这是面向方面的编程(AOP)的示例。

最好用一个简单的例子来解释。 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>

我们有一个类型为targetService的bean com.x.MyClass,它实现了com.x.MyService接口(interface)。我们还有一个名为cachingInterceptor的拦截器bean,它实现了org.aopalliance.intercept.MethodInterceptor接口(interface)。

此配置将生成一个名为cachedService的新bean,该bean实现MyService接口(interface)。任何对该对象上方法的调用都将首先通过cachingInterceptor对象的invoke()方法传递,在这种情况下,该方法将在其内部缓存中查找先前方法调用的结果。它将返回缓存的结果,或者允许方法调用继续进行targetService上的相应方法。
targetService本身对此一无所知,它完全不知道所有这些AOP正在进行的事情。

出于各种原因(例如远程存根,事务管理),ProxyFactoryBean在Spring内部大量使用以生成代理,但它也非常适合在应用程序逻辑中使用。

10-05 23:18