在ProxyFactoryBean中注入属性时,顺序是否重要

时间:2011-08-08 08:34:30

标签: spring spring-aop spring-3

我正在尝试在服务中注入方面。对于这项服务,我使用经典方式创建代理对象。

我编写了一个类型为(ProxyFactoryBean)的bean-baseProxy,其中包含了所有必需建议的列表。

    <bean id="baseProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="interceptorNames">
        <list>
            <value>methodInvocationAdvice</value>
        </list>
    </property>
</bean>

我正在为此服务创建代理:

<bean id="singproxy" parent="baseProxy">
    <property name="target" ref="singtarget" />
    <property name="targetClass" value="com.spring.learning.SingingService"></property>
</bean>

哪个不起作用,但当我还原这两个属性并写成这样:

<bean id="singproxy" parent="baseProxy">
    <property name="targetClass" value="com.spring.learning.SingingService"></property>
    <property name="target" ref="singtarget" />
</bean>

令我惊讶的是它工作正常。在春天,豆的订单是否重要?或者它是ProxyFactoryBean的一个特例? 我尝试使用Spring 3.0,我不确定以前版本是否存在相同的行为。

1 个答案:

答案 0 :(得分:1)

关于targettargetClass,它是一个或另一个,但不是两个。这是相关的源(来自org.springframework.aop.framework.AdvisedSupport),父类ProxyFactoryBean

public void setTarget(Object target) {
    setTargetSource(new SingletonTargetSource(target));
}

public void setTargetSource(TargetSource targetSource) {
    this.targetSource = (targetSource != null ? targetSource : EMPTY_TARGET_SOURCE);
}


public void setTargetClass(Class targetClass) {
    this.targetSource = EmptyTargetSource.forClass(targetClass);
}

如您所见,setTarget()setTargetClass()都写入同一字段,因此最后一次分配获胜。