【问题标题】:Multi module Maven project with Spring - Do I include Spring in the Web layer or Service layer?带有 Spring 的多模块 Maven 项目 - 我是否在 Web 层或服务层中包含 Spring?
【发布时间】:2017-04-02 22:12:26
【问题描述】:

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

狗是从哪里来的?好吧,我还有另一个模块,它是一个“服务”层,基本上包含一个 Dog 商店/服务,而这个狗商店实际上在任何给定时间只包含一个 Dog 对象(这都是为了学习目的)。

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

我的问题是这样的:我需要在服务模块和 Web 模块中都添加 Spring 依赖项吗?事实上,最终项目将从 web 模块构建。 Web 模块将依赖于服务模块(因为我需要 Dog Service 和 Dog 对象类)。

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

也许只是将整个 Spring Web MVC 依赖项放在 Service 模块中,让 Web 模块“继承”所有自定义服务类,加上下载的 Spring jar? (同样,web-module 将依赖于 service 模块)。这对我来说似乎有点违反直觉,因为它并不是真正依赖于 Spring Web MVC 的服务模块。实际上,服务模块只需要 Spring Context。但这里的困惑是“最终”弹簧上下文(Dispatcher Servlet 等)只会在 Web 模块构建中使用一次。

我只是创建服务模块,以便我的 web 模块可以继承我已经构建的那些类,但是 web 模块应该从服务模块继承 spring 类,或者 web 模块实际上应该在它自己的 POM.xml 中声明 spring 类?如果是后一种选择,那么当服务模块看到我正在使用 Spring 框架中的注释和其他东西时,它不会发疯吗?

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

【问题讨论】:

    标签: java spring eclipse maven


    【解决方案1】:

    我建议向您的应用程序添加一个父 POM,并保留在那里定义的所有依赖项,并使您的 Web 和服务模块成为子模块。更多详情请见this

    在你的父 POM 中,依赖项是这样定义的,

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

    在您的网络和服务模块中使用上述定义的依赖项,

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

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

    【讨论】:

      猜你喜欢
      • 2018-12-29
      • 1970-01-01
      • 2017-05-31
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多