Purpose of Bean annotations for non-Job methods in trivial Spring Batch example
我正在熟悉整个 Spring 堆栈。
我在这里指的是 spring.io 上发布的一个简单的 Spring Batch 示例:https://spring.io/guides/gs/batch-processing/
作业配置类
在我看来,通过从除
所有 Spring Batch 示例都显示在非作业方法周围的
以下摘录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | @Configuration @EnableBatchProcessing public class BatchConfiguration { @Autowired public JobBuilderFactory jobBuilderFactory; @Autowired public StepBuilderFactory stepBuilderFactory; @Autowired public DataSource dataSource; @Bean public FlatFileItemReader<Person> reader() ... @Bean public PersonItemProcessor processor() ... @Bean public JdbcBatchItemWriter<Person> writer() ... @Bean public Job importUserJob(JobCompletionNotificationListener listener) { return jobBuilderFactory.get("importUserJob") .incrementer(new RunIdIncrementer()) .listener(listener) .flow(step1()) .end() .build(); } @Bean public Step step1() ... } |
感谢您的阅读和帮助。
因此,它将参与所述上下文的生命周期,并接收像
如果你省略
因此,不应该省略
从技术上讲,您可以在不使用
一个
您当然可以手动执行此操作,但这需要大量样板代码,并且您需要发送配置的对象。在您的示例中,为所有内容创建 bean 可能没有任何好处,但是当批次变大时,我相信您会错过 Springs bean 处理的灵活性。我个人用其他一些框架编写了一个没有 Springs 依赖注入的批处理。首先我有一个紧凑的模型,但随着事情的发展,我真的感受到了样板代码的痛苦,这影响了我的代码的可读性。
此外,Spring 管理的 bean 还负责做其他事情,例如关闭资源。
当然,依赖注入只是一种工具,对于某些用例来说可能是一种过度杀伤力。您可能会对这些文章感兴趣:
- https://martinfowler.com/articles/dipInTheWild.html
- https://sites.google.com/site/unclebobconsultingllc/blogs-by-robert-martin/dependency-injection-inversion