【问题标题】:how to include a spring project into another spring project如何将一个spring项目包含到另一个spring项目中
【发布时间】:2014-04-16 19:27:23
【问题描述】:

我是 spring 新手,目前正在努力理解在当前项目中使用现有 spring 项目所需的设置

我有一个 spring 项目,其中包含与数据库和 web 服务通信的所有服务。

我正在编写一个需要与数据库和网络服务通信的新应用程序。

我想过在另一个项目中重新使用现有的实现。

我将项目包含在当前项目的构建路径中。

但是我收到依赖注入错误。 现在我有点想看看我当前项目设置中需要拥有的所有其他文件,以便我可以重用现有项目。

我是否需要将另一个项目的上下文文件导入到我当前的项目中?如果是这样,有人可以指向我可以参考的文档以获得一些指导吗?

【问题讨论】:

    标签: java spring spring-mvc dependency-injection


    【解决方案1】:

    我会试一试的。希望我能澄清你的问题... =D

    当您说“我将项目包含在当前项目的构建路径中。”时,我假设您添加了一个 spring web 项目作为对另一个 spring web 项目的依赖项。总之,你不能将一个 spring web 项目添加为另一个 spring web 项目的依赖项。让我们先花点时间了解一下如何连接 bean 以首先在 Spring 容器中进行注入...

    当你使用 spring 框架时,你会在你的 web.xml 中找到类似的代码,如下所示:

    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>
    

    你刚才所做的是使用spring框架的servlet来处理每个以.htm结尾的请求URL。当然你也可以另外配置。

    您还应该有另一个包含所有 bean 标记的 xml。默认情况下,它是 spring-servlet.xml。在这个 spring-servlet.xml 中,如果您采用 xml 配置方法,您可以指定将哪个 bean 注入哪个 bean。如果您使用注解方法,您应该有一个标签来扫描所有现有的@Component(及其派生注解)注解类,然后使用@Inject 或@Autowired 注解注入声明的实例(bean)。例如:

    <context:component-scan
        base-package="org.companyname.webappname" />
    <context:annotation-config />
    

    到目前为止,我一直在解释的是如何在 spring 容器中声明一个 bean。只有当您在 spring 容器中声明一个 bean(当 Web 服务器启动时存在于 spring 容器中)并指定它应该注入哪个类时,才会发生“注入”。

    所以现在你有两个 spring web 项目(假设),有两个 web.xml 和两个 spring 容器,你将在获取基础项目的 spring 容器来查找依赖的 spring web 项目的包/类时遇到问题。我建议你将依赖项目中的所有类都移到基础项目中,并且只有一个 spring 容器(一个 web.xml)。

    另一种方法是创建一个 Java 库项目,将所有服务、DAO 和 Web 服务类放入其中并将其构建为 jar。在您的基础项目中,添加 jar 文件(作为依赖项),然后对 jar 包进行组件扫描,或者使用 jar 包在 xml 中声明它。无论哪种方式,您都应该只有一个 spring 容器,一个 web.xml。

    希望我没有让你感到困惑。

    您首先要了解 IoC 容器的工作原理。这里是你需要阅读和理解 Spring IoC 工作原理的地方:http://docs.spring.io/spring/docs/3.0.x/reference/beans.html

    更新:如果你在做一个非 web spring 项目,那么只有一个 spring 容器的概念仍然存在。将依赖项目的类移动到jar文件的解决方案仍然有效。除非你不通过 web.xml 配置 spring。 =D

    【讨论】:

    【解决方案2】:

    您需要将包含服务层的 bean 定义的文件(例如 service-context.xml)导入到新项目中。 可以这样做:

        <import  resource="classpath:service-context.xml"/>
    

    【讨论】:

      【解决方案3】:

      这取决于您如何设置项目。 一般来说,您需要使用

      可以查看here 的一个示例(请参阅有关如何将项目包含在您自己的应用程序中的说明)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-11
        • 2011-07-04
        • 1970-01-01
        • 2013-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多