2009-08-14 72 views
1

我有一個在XML創建像這樣一個倉儲類:@Autowired和TransactionProxyFactoryBean?

<bean id="stuffRepositoryTarget" class="my.stuff.RepositoryImpl"> 
<!-- some params --> 
</bean> 

<bean id="stuffRepository" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" primary="true"> 
    <property name="target" ref="stuffRepositoryTarget" /> 
    <property name="transactionAttributes"> 
    <prop key="*">PROPAGATION_REQUIRED</prop> 
    </property> 
</bean> 

然後,我有一個使用這樣的庫類:

@Autowired Repository repository; 

看來,@Autowired註解是指的是我的Impl對象而不是我的事務攔截器。我究竟做錯了什麼?

回答

1

最可能的解釋是,由TransactionProxyFactoryBean創建bean的未實現Repository

只是檢查,但Repository一個接口,對不對?

要嘗試的另一件事是標記stuffRepositoryTargetautowire-candidate="false",這將防止它意外自動連線。

+0

autowire-candidate =「false」是一個很酷的技巧,我不知道。感謝您的建議! – 2009-08-17 23:18:27

+0

這只是公平的,你教給我一個關於自動裝配的不爲人知的事實:) – skaffman 2009-08-18 07:41:58

1

有可能會混淆注入哪個bean ...將一個限定符添加到您的bean引用中,您可以使用該限定符指定您希望注入的確切的bean id。

喜歡的東西:

@Qualifier("stuffRepository") 
@Autowired Repository repository;