39

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

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

4

2 回答 2

55

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>

我们有一个实现接口的 beantargetService类型。我们还有一个叫作拦截器 bean ,它实现了接口。com.x.MyClasscom.x.MyServicecachingInterceptororg.aopalliance.intercept.MethodInterceptor

此配置将生成一个名为 的新 bean cachedService,它实现了MyService接口。对该对象的方法的任何调用都将首先通过cachingInterceptor对象的invoke()方法传递,在这种情况下,该方法将在其内部缓存中查找先前方法调用的结果。它要么返回缓存的结果,要么允许方法调用继续到适当的方法targetService

targetService它自己对此一无所知,它完全不知道所有这些 AOP 的事情正在发生。

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

于 2010-08-16T07:58:24.090 回答
6

ProxyFactoryBean 将方面应用于现有 bean。您从现有的 bean(目标 bean)开始,弹簧“包装”以添加您提供的方面。返回的 bean 与原始 bean 具有相同的接口,但在目标 bean 的方法周围编织了其他方面。

于 2010-08-15T23:16:46.283 回答