Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Maven使用Spring构建和依赖注入_Java_Spring_Maven - Fatal编程技术网

Java Maven使用Spring构建和依赖注入

Java Maven使用Spring构建和依赖注入,java,spring,maven,Java,Spring,Maven,我有一个使用Maven管理的Java应用程序。该项目涉及一些国家的概念,例如: 公共接口ICountry{ 公共无效剂量(); } 公共类英格兰实现ICountry{…} 公共类巴西实现ICountry{…} 公共类CountryApp{ 公共静态void main(字符串参数[]){ i国家/地区=空; //伪代码: //使用Spring检索选定的ICountry实现 国家。doSomething(); } } 从我所看到的情况来看,每个国家可能有一个Spring配置文件。看起来可以使用配置

我有一个使用Maven管理的Java应用程序。该项目涉及一些国家的概念,例如:

公共接口ICountry{
公共无效剂量();
}
公共类英格兰实现ICountry{…}
公共类巴西实现ICountry{…}
公共类CountryApp{
公共静态void main(字符串参数[]){
i国家/地区=空;
//伪代码:
//使用Spring检索选定的ICountry实现
国家。doSomething();
}
}
从我所看到的情况来看,每个国家可能有一个Spring配置文件。看起来可以使用配置文件中的元素来选择适当的配置文件。然而,文档中说,概要文件旨在支持在不同环境中构建,而不是具有不同的应用程序配置

这听起来合理吗?如果有人知道更好或“更标准”的方法,请让我知道:)

编辑:最终我希望能够为每个国家创建一个.jar。e、 g

  • myapp-england.jar
  • myapp-brazil.jar等

    • 我可以看到一些解决方案

      如果您希望每个国家都有一个JAR文件,正确的方法是为每个国家创建一个单独的Maven项目。有一个定义接口的公共项目,然后每个国家有一个单独的项目,其中包含实现类、作为依赖项的接口项目以及任何所需的附加功能或配置。这样,您就可以清晰地分离各种实现,而不必担心构建设置。它也是可扩展的,因为如果你想添加一个新的国家,你只需添加另一个项目,你就可以安全地破坏任何现有的功能

      如果您想将其保留在一个项目中,您需要考虑何时决定使用哪个国家:是在构建时还是在运行时?使用Maven,您将在构建时做出决策,而Spring是一个运行时决策。如果您希望能够在运行时做出决定,那么属性文件可能是最佳选择。尽可能以通用的方式运行构建,而不引用所使用的国家/地区,然后让用户或管理员在运行时决定使用哪个国家/地区,例如,通过提供一个属性文件,该文件引用了要使用的Spring上下文文件。在
      main
      方法中,您可以从类路径加载这个属性文件,并决定加载哪个Spring上下文文件


      在这种情况下,请在Spring配置中引用一个公共bean名称,即确保无论您加载哪个国家特定的Spring上下文文件,它们都包含一个ID为country的bean,我可以看到一些解决方案

      如果您希望每个国家都有一个JAR文件,正确的方法是为每个国家创建一个单独的Maven项目。有一个定义接口的公共项目,然后每个国家有一个单独的项目,其中包含实现类、作为依赖项的接口项目以及任何所需的附加功能或配置。这样,您就可以清晰地分离各种实现,而不必担心构建设置。它也是可扩展的,因为如果你想添加一个新的国家,你只需添加另一个项目,你就可以安全地破坏任何现有的功能

      如果您想将其保留在一个项目中,您需要考虑何时决定使用哪个国家:是在构建时还是在运行时?使用Maven,您将在构建时做出决策,而Spring是一个运行时决策。如果您希望能够在运行时做出决定,那么属性文件可能是最佳选择。尽可能以通用的方式运行构建,而不引用所使用的国家/地区,然后让用户或管理员在运行时决定使用哪个国家/地区,例如,通过提供一个属性文件,该文件引用了要使用的Spring上下文文件。在
      main
      方法中,您可以从类路径加载这个属性文件,并决定加载哪个Spring上下文文件


      在这种情况下,在Spring配置中引用一个公共bean名称,即确保无论加载哪个国家/地区的Spring上下文文件,如果它们都包含一个ID为country的bean,那么可以使用profiles运行一个具有不同实现的程序,该实现指示在Maven profiles控制的变量中运行。我已经在几个项目中完成了这项工作,但只有一个代码,一个jar。为每个实现构建不同的jar更为复杂

      更好的方法是有一个Maven多项目,我的意思是,一个只有几个pom.xml文件的项目,每个文件都有自己的配置和实现

      - Parent project 
        - common project (interfaces and common codec)
        - country 1 project (with dependency of common project)
        - country 2 project (with dependency of common project)
        - ...
      

      使用概要文件,您可以运行具有不同实现的程序,这些实现指示要在Maven概要文件控制的变量中运行的实现。我已经在几个项目中完成了这项工作,但只有一个代码,一个jar。为每个实现构建不同的jar更为复杂

      更好的方法是有一个Maven多项目,我的意思是,一个只有几个pom.xml文件的项目,每个文件都有自己的配置和实现

      - Parent project 
        - common project (interfaces and common codec)
        - country 1 project (with dependency of common project)
        - country 2 project (with dependency of common project)
        - ...
      

      你想测试每个国家吗?或者您想根据测试环境选择正确的国家/地区吗?您如何确定应该使用哪个国家/地区?使用DI注入国家似乎有点不合适。最终,我希望能够为每个国家创建一个.jar。e、 g.myapp-england.jar、myapp-brazic.jar等@beerbajay目前我会使用Maven配置文件选择
      ICountry
      。e、 g.
      mvn clean compile-P england profile
      ,这将选择引用england类的Spring配置。这很有趣