(Spring-Batch)自动装配在StepScopeTestExecutionListener中运行不正常

时间:2014-10-13 16:04:02

标签: scope spring-batch

我正在尝试弹簧批量测试代码。

我使用StepScopeTestExecutionListener自动装配按步骤确定范围的bean。

(当然,我将此侦听器用作TestExecutionListeners注释。)


豆子注入豆子后很好。

<bean id="itemReader" scope="step" class="org.springframework.batch.item.file.FlatFileItemReader">
...
</bean>

@Autowired
@Qualifier(value="itemReader")
ItemReader<Item> reader;

但事实并非如此。发生NoSuchBeanDefinitionException并带有消息&#34;找不到类型为[org.springframework.batch.item.file.FlatFileItemReader]的限定bean用于依赖&#34;

@Autowired
@Qualifier(value="itemReader")
FlatFileItemReader<Item> reader;

显然,我认为这是步骤范围的问题。

但是,我并不了解ItemReader和FlatFileItemReader之间的区别。

或者,StepScopeTestExecutionListener中是否存在问题?

我应该用已实现的方法测试FlatFileItemReader,例如setResources()或open()......你知道我的意思。

请帮忙。

谢谢。

2 个答案:

答案 0 :(得分:3)

这是因为XML配置使用Java代理进行步骤范围的依赖。因此,生成的bean定义只能识别接口(在本例中为ItemReader)。为了使其工作,您需要完全切换到java配置(当前java配置使用动态子类而不是Java代理)或配置步骤范围以便proxyTargetClass设置为true(这使用动态子类化) )以便提供实施班级信息。

答案 1 :(得分:1)

以下为我工作

@Resource(name="itemReader")
ResourceAwareItemReaderItemStream<Item> itemReader

 @Autowired
 @Qualifier("itemReader")
 ResourceAwareItemReaderItemStream<Item> itemReader

完成拍摄

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners( { DependencyInjectionTestExecutionListener.class,
                           StepScopeTestExecutionListener.class })
@ContextConfiguration({"classpath:spring/jdbc/unit-test-context.xml"})
public class SomeTest  {

        @Resource(name="itemReader")
        ResourceAwareItemReaderItemStream<Item> itemReader