测试代码
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:transactional/batch/context.xml" })
public class TransactionTest {
@Autowired
TestBatch testBatch;
案例 1:TestBatch 自动连接到 TransactionTest 成功
上下文.xml
<context:annotation-config />
<bean id="testBatch" class="transactional.batch.TestBatch"/>
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
案例2:但是这个案例失败了。
上下文.xml
<context:annotation-config />
<bean id="testBatch" class="transactional.batch.TestBatch"/>
<tx:annotation-driven transaction-manager="transactionManager"/>
例外
引起:org.springframework.beans.factory.BeanCreationException:无法自动装配字段:transactional.batch.TestBatch transactional.batch.TransactionTest.testBatch;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义类型 [transactional.batch.TestBatch] 的唯一 bean:未满足类型 [class transactional.batch.TestBatch] 的依赖关系:预计至少有 1 个匹配 bean 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:435) 在 org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:105) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessAfterInstantiation(AutowiredAnnotationBeanPostProcessor.java:240) ... 19 更多 原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义类型 [transactional.batch.TestBatch] 的唯一 bean:类型 [class transactional.batch.TestBatch] 的不满足依赖性:预计至少有 1 个匹配 bean 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:613) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:412) ... 21 更多
唯一不同的是tx:annotation-driven
'proxy-target-class
属性。
为什么要tx:annotation-driven
控制自动线?