テストコード
@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"/>
例外
原因: 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
オートワイヤーを制御するのですか?