ProxyFactoryBean用于将拦截器逻辑应用于现有目标Bean,以便在调用该Bean上的方法时,拦截器在该方法调用之前和之后执行。这是面向方面的编程(AOP)的示例。
最好用一个简单的例子来解释。AOP的经典用例是将缓存应用于方法调用的结果。可以使用
ProxyFactoryBean以下方式进行连接:
<bean id="targetService" /><bean id="cachingInterceptor" /><bean id="cachedService" > <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。我们还有一个名为拦截器的Bean
cachingInterceptor,它实现了接口
org.aopalliance.intercept.MethodInterceptor。
此配置将生成一个名为的新bean
cachedService,该bean
实现该
MyService接口。任何对该对象上方法的调用都将首先通过该
cachingInterceptor对象的
invoke()方法传递,在这种情况下,该方法将在其内部缓存中查找先前方法调用的结果。它将返回缓存的结果,或允许方法调用继续进行到上的适当方法
targetService。
targetService本身对此一无所知,它完全不知道所有这些AOP正在进行的事情。
ProxyFactoryBean
由于各种原因(例如,远程存根,事务管理),它在Spring内部被大量使用以生成代理,但是它也非常适合在应用程序逻辑中使用。



