Spring Boot示例理解

时间:2016-06-19 11:18:28

标签: java spring spring-mvc

我正在使用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

1 个答案:

答案 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);
    }