使用Spring进行Maven构建和依赖注入

时间:2012-03-29 16:23:24

标签: java spring maven

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

public interface ICountry {
    public void doSomething();
}

public class England implements ICountry {...}
public class Brazil  implements ICountry {...}

public class CountryApp {
    public static void main (String args[]) {

        ICountry country = null;

        // PSEUDOCODE:
        // Retrieve a chosen implementation of ICountry using Spring

        country.doSomething();
    }
}

从我所见的Spring开始,我可能会为每个国家/地区提供一个Spring配置文件。可以使用Maven profiles使用配置文件中的元素选择适当的配置文件。然而,文档说配置文件旨在支持在不同环境中构建,而不是具有不同的应用程序配置。

这听起来像是一种合理的做法吗?如果有人知道更好或更“标准”的方式,请告诉我:)

编辑:最终,我希望能为每个国家/地区创建一个.jar。例如

  • MyApp的-england.jar,
  • myapp-brazil.jar等

2 个答案:

答案 0 :(得分:3)

我可以看到几个解决方案......

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

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

在这种情况下,请参考Spring配置中的公共bean名称,即确保无论加载哪个特定于国家/地区的Spring上下文文件,它们都包含ID为country的bean。 / p>

答案 1 :(得分:2)

使用配置文件,您可以运行具有不同实现的程序,指示在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)
  - ...