2009-08-14 2 views
1

У меня есть класс репозитория, который создается в XML, как так:@Поддержка и транзакцияProxyFactoryBean?

<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 не реализует Repository.

Просто проверка, но Repositoryis интерфейс, не так ли?

Еще одна вещь, которую следует попробовать отметить: stuffRepositoryTarget с autowire-candidate="false", что предотвратит его случайное автоподключение.

+0

autowire-candid = "false" - это классный трюк, о котором я не знал. Спасибо за предложение! –

+0

Это справедливо, вы научили меня неясному факту об автопостановке на днях :) – skaffman

1

Может возникнуть путаница в отношении того, какой компонент нужно вводить ... Добавить квалификатор в ссылку на bean, с помощью которой вы можете указать конкретный идентификатор компонента, который вы хотите ввести.

Что-то вроде:

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