我正在使用Spring Boot读取和写入CSV文件,但我无法理解@Bean标签。为什么我们使用这个标签进行处理或写作。
例如:
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<Person, Person> chunk(10)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
我还有另一个问题,为什么我们在get方法中传递step1
?
答案 0 :(得分:0)
Bean
注释是创建类型为Step
的bean,您可以将此bean注入job
。
@Bean
@Autowired
public Job importUserJob(Step step) { // auto-wired the bean
return jobBuilderFactory.get("importUserJob")
.incrementer(new RunIdIncrementer())
.listener(listener())
.flow(step) // note this
.end()
.build();
}
如果直接调用step1方法来执行作业
,则不需要Bean注释@Bean
public Job importUserJob() { // no args
return jobBuilderFactory.get("importUserJob")
.incrementer(new RunIdIncrementer())
.listener(listener())
.flow(step1()) // directly calling the method
.end()
.build();
}
在示例中,同一个类上的步骤和作业,所以他们直接调用了方法,但是如果它们都在不同的类上,那么你必须将它们作为bean并注入你需要的类。
step1
是从工厂stepBuilderFactory
<强>更新强>
使用和不使用Bean注释执行应用程序,获取bean定义列表,如果您的方法使用Bean注释,您将从上下文获取bean
ApplicationContext context = SpringApplication.run(SpringBoot.class, args);
String[] beans = context.getBeanDefinitionNames();
for (String bean : beans) {
System.out.println(bean);
}