使用Spring的多模块Maven项目 - 我是否在Web层或服务层中包含Spring?

时间:2017-04-02 22:12:27

标签: java spring eclipse maven

所以我有一个多模块Maven项目,它只有两个子模块:Web和Service。 Web层在该控制器中只有一个控制器和一个方法,它只是在屏幕上显示狗的年龄。

狗来自哪里?好吧,我有另一个模块,即服务'基本上包含Dog商店/服务的图层,这个狗商店实际上在任何给定时间只包含一个Dog对象(这都是出于学习目的)。

我需要在我的服务模块中使用Spring的依赖注入功能,以便将Dog对象自动装入我的Dog商店,我显然需要Spring的D.I.我的Web模块中的功能,以便将狗商店/服务自动装入我的Dog控制器,但我不知道WHICH POM.xml应该包含Spring依赖。

我的问题是 :我是否需要在服务模块和Web模块中放置Spring依赖项?事实上,最终项目将从Web模块构建。 Web模块将具有服务模块的依赖性(因为我需要Dog Service和Dog对象类)。

如果我不在我的服务模块中包含spring作为依赖项,那么当我使用像@Autowire这样的注释时,编译器就会吓坏。所以这让我有点困惑。我将spring依赖项放在哪个模块中?

或许只是将整个Spring Web MVC依赖项放在Service模块中,让Web模块继承'所有自定义服务类,PLUS下载的Spring jar? (因为,web模块将再次依赖于服务模块)。这对我来说似乎有点违反直觉,因为它并不是真正依赖于Spring Web MVC的服务模块。实际上,服务模块只需要Spring Context。但这里的混乱是" FINAL" spring上下文(Dispatcher Servlet等)只能在Web模块构建中使用一次。

我只创建服务模块,以便我的web模块可以继承我已构建的类,但是web模块是否应该从服务模块继承spring类,或者应该是web-module实际上在它自己的POM.xml中声明了spring类?如果它是后一个选项,那么当它看到我使用Spring框架中的注释和其他东西而没有依赖它时,会不会对服务模块感到不满?

我意识到这很多,但我想在我的情况下尽可能清楚,我希望我的问题有道理。谢谢你的回答!

1 个答案:

答案 0 :(得分:0)

我建议在您的应用程序中添加父POM,并在此处定义所有依赖项,并使您的Web和服务模块成为子模块。有关详细信息,请参阅this

在您的父POM中,依赖关系定义如下,

<dependencyManagement>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>4.3.5.RELEASE</version>
  </dependency>
</dependencyManagement>

在您的Web和服务模块中使用上面定义的依赖项

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
</dependency>

此外,将服务模块添加为您的Web模块的依赖项。