SpringBatch-javaconfig与xml

SpringBatch-javaconfig与xml,java,spring-batch,spring-java-config,xml-configuration,Java,Spring Batch,Spring Java Config,Xml Configuration,我已经使用SpringBatch的Xml配置有一段时间了,我觉得它更简单、简洁。然而,现在,人们建议使用javaconfig而不是xml。我用谷歌搜索了这个话题 这个网站告诉我们为什么javaconfig更好 选择javaconfig而不是xml的主要原因: 我们希望在框架中进行一些基本配置。人们补充说 依赖于我们的框架库并导入这些 根据需要进行配置。如果这些配置 如果是用XML编写的,他们将很难将它们打开 看看他们在干什么。Java没有问题 XML中没有可导航性。只要你愿意,那可能没问题 不要

我已经使用SpringBatch的Xml配置有一段时间了,我觉得它更简单、简洁。然而,现在,人们建议使用javaconfig而不是xml。我用谷歌搜索了这个话题

这个网站告诉我们为什么javaconfig更好

选择javaconfig而不是xml的主要原因

  • 我们希望在框架中进行一些基本配置。人们补充说 依赖于我们的框架库并导入这些 根据需要进行配置。如果这些配置 如果是用XML编写的,他们将很难将它们打开 看看他们在干什么。Java没有问题
  • XML中没有可导航性。只要你愿意,那可能没问题 不要有太多的XML文件,它们都在您的工作区中, 因为这样您就可以利用SpringIDE支持。但是 框架库通常不应作为项目添加到 工作空间。当使用基于Java的配置时,您可以 跳转到框架配置类。我将更多地谈论 这个主题在下面的博客文章中
  • 在一个框架中,您通常有需求 图书馆的用户必须履行义务,才能使一切顺利进行 工作,例如需要一个数据源,一个 PlatformTransactionManager和线程池。实施 从框架的角度来看,这并不重要,他们只需要 去那里。在XML中,您必须为 框架的用户,告诉他们需要添加这个和这个 将此名称下的SpringBean添加到ApplicationContext。在爪哇 您只需编写一个接口来描述该合同,以及人员 使用库实现该接口并将其添加为 将配置类添加到ApplicationContext。我就是这么做的 使用接口
  • 这个网站告诉我们为什么xml更好

    选择xml而不是javaconfig的主要原因

  • 配置是集中的,并不是分散在所有不同的组件中,所以您可以在一个地方很好地了解bean及其布线
  • 如果您需要分割文件,没问题,Spring允许您这样做。然后,它在运行时通过内部标记或外部上下文文件聚合重新组装它们
  • 只有XML配置允许显式连接,而不是自动连接。有时候,后者对我来说太神奇了。它表面上的简单性隐藏了真正的复杂性:我们不仅需要在按类型和按名称自动连接之间切换,更重要的是,在所有符合条件的bean中选择相关bean的策略无法实现,但经验更丰富的Spring开发人员也无法实现。配置文件似乎使这更容易,但相对较新,为数不多的人所知
  • 最后但并非最不重要的一点是,XML与Java文件完全正交:两者之间没有耦合,因此该类可以在具有不同配置的多个上下文中使用
  • 我的结论是,如果您正在创建独立的批处理作业,并且没有通过与SpringBatch集成来创建任何新框架,那么xmls仍然可以使用


    我遗漏了xmls的任何缺点吗?让我补充一些关于这个主题的额外想法

    使用javaconfig时,我真正喜欢的是动态创建作业的能力。例如,您可以有一个带有文件名的inputparameter,然后创建一个作业,通过为每个接收到的文件名创建一个步骤,并行地读取和处理这些文件。(使用MultiResourceItemReader将按顺序执行此操作)。此外,根据inputparameter,还可以以不同的方式定义作业流

    关于您选择xml而不是javaconfig的原因,我的想法如下: 第一点:在我看来,这并不重要。您可以拥有自己的配置类,也可以定义自己的包。您甚至可以将它们放在自己的模块中。这只是如何组织代码的问题

    第二点:同样,这也不算数。您可以将配置拆分为任意多个类。您可以使用@Import和@ContextScan注释将所需内容集成到上下文中

    第3点:如果您按类而不是按接口进行自动布线,那么自动布线也可以非常明确。此外,还可以直接调用用@Bean注释的方法。例如:

    @Configuration
    public MyBeanFactory {
       @Bean
       public MyBeanInterface bean1() {
           return ...;
       }
    
       @Bean
       public MyBeanInterface bean2() {
           return ...;
       }
    }
    
    @Component
    public MyBeanuser {
    
      @Autowired
      private MyBeanFactory beanFactory;
    
      @PostConstruct
      public void afterPropertiesSet() {
         // this will actually set the bean that was created an registered in the
         // spring context and not simply call the the method and create a new
         // instance. So  this wiring is very explicitly
         setProperty1(beanFactory.bean1());
         setProperty2(beanFactory.bean2());
     }
    
    最后,我想这也是一个品味的问题。我在SpringBatch环境中使用xml配置已经超过5年了。两年前,我们完全改用javaconfig而不是xml。老实说,我还没有找到一个我想重新使用xml的理由。然而,这是我的“品味问题”