2011-08-08 3 views
2

서비스의 측면을 주입하려고합니다. 이 서비스에서는 고전적인 방법으로 프록시 객체를 생성합니다.ProxyFactoryBean에서 속성을 주입하는 동안 순서가 중요합니까?

필자는 모든 필수 권고 목록이 들어있는 유형 (ProxyFactoryBean)의 bean-baseProxy를 작성했습니다.

<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> 

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

는이 같은 서비스에 대한 프록시를 만드는 오전 놀랍게도 잘 작동합니다. 봄에는 콩 주문이 중요합니까? 아니면 ProxyFactoryBean의 특별한 경우입니까? Spring 3.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() 쓰기 때문에 마지막 할당 승리 .

+0

만약이 방법이 그렇다면 왜 오직 목표만을 제공하지만 목적은 해결하지만 targetClass 만주는 것은 아닌가? –

+0

당신을 얻지 못했습니다. –

+0

@java_enthu 그래, 당신이 귀하의 의견을 변경 한 것 같아 내 대답은 원래의 코멘트에 대한 것입니다 :-) –