2

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

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

    <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 我不确定以前的版本是否存在相同的行为。

4

1 回答 1

1

关于targetand targetClass,它是一个或另一个,但不是两者兼而有之。这是相关来源(来自 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()同一个字段,因此最后一个作业获胜。

于 2011-08-08T08:49:14.387 回答