TestCodeSpring 2,5 SpringJUnit4ClassRunner не autowire при ОМ: аннотации привода используется
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:transactional/batch/context.xml" })
public class TransactionTest {
@Autowired
TestBatch testBatch;
Случай 1: TestBatch является автоматическим проводом TransactionTest успешно
context.xml
<context:annotation-config />
<bean id="testBatch" class="transactional.batch.TestBatch"/>
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
Случай 2: Но этот случай не выполнен.
context.xml
<context:annotation-config />
<bean id="testBatch" class="transactional.batch.TestBatch"/>
<tx:annotation-driven transaction-manager="transactionManager"/>
Исключение
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: transactional.batch.TestBatch transactional.batch.TransactionTest.testBatch; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [transactional.batch.TestBatch] is defined: Unsatisfied dependency of type [class transactional.batch.TestBatch]: expected at least 1 matching bean at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:435) at org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:105) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:240) ... 19 more Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [transactional.batch.TestBatch] is defined: Unsatisfied dependency of type [class transactional.batch.TestBatch]: expected at least 1 matching bean at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:613) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:412) ... 21 more
Только разница tx:annotation-driven
«s proxy-target-class
атрибутов.
Почему tx:annotation-driven
управлять автомобильным проводом?
ну, мне кажется, что это не то, что «tx: управляемый аннотацией автоматический провод». Но вместо этого на основе стека класс автопроксирования имеет тот же идентификатор 'Нет уникального компонента типа [transactional.batch.TestBatch]'. Почему вы не пытаетесь использовать [@Qualifier] (http://static.springsource.org/spring/docs/2.5.x/reference/beans.html#beans-autowired-annotation-qualifiers)? – maverick