我正在尝试在服务中注入方面。对于这项服务,我使用经典方式创建代理对象。
我编写了一个类型为(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,我不确定以前版本是否存在相同的行为。
答案 0 :(得分:1)
关于target
和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()
都写入同一字段,因此最后一次分配获胜。