ProxyFactoryBean in Spring

2022-09-01 03:48:34

有人可以用简单的术语解释ProxyFactoryBean吗?

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


答案 1

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>

我们有一个类型的bean,它实现了接口。我们还有一个名为 的拦截器 Bean,它实现了接口 。targetServicecom.x.MyClasscom.x.MyServicecachingInterceptororg.aopalliance.intercept.MethodInterceptor

此配置将生成一个名为 的新 Bean,它实现接口。对该对象上的方法的任何调用将首先通过该对象的方法传递,在本例中,该方法将在其内部缓存中查找先前方法调用的结果。它将返回缓存的结果,或者允许方法调用继续执行 上的适当方法。cachedServiceMyServicecachingInterceptorinvoke()targetService

targetService它本身对此一无所知,它完全不知道所有这些AOP的东西。

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


答案 2

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


推荐