如何将弹簧项目纳入另一个春季项目

时间:2014-03-12 14:53:56

标签: java spring spring-mvc dependency-injection

我是春天新手,目前正在努力了解在我当前项目中使用现有弹簧项目所需的设置

我有一个spring项目,它具有与数据库和Web服务进行通信的所有服务。

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

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

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

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

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

3 个答案:

答案 0 :(得分:5)

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

当你说'#34;我把项目包含在当前项目的构建路径中时。",我假设你添加了一个spring web项目作为另一个spring web项目的依赖项。总之,您不能将spring Web项目添加为另一个Spring Web项目的依赖项。让我们花一些时间来了解你如何连接豆子以便先在弹簧容器中注射......

使用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 framework的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。 &#34;注射&#34;仅当您在spring容器中声明一个bean(在Web服务器启动时生活在spring容器中)并指定应该注入哪个类时才会发生。

现在您有两个弹簧Web项目(假设),两个web.xml和两个弹簧容器,您将无法获得基础项目的弹簧容器来查找依赖的弹簧Web项目&# 39; s包/类。我建议你将依赖项目中的所有类移动到base-project中,并且只有一个spring容器(一个web.xml)。

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

希望我不要混淆你。

您必须先了解IoC容器的工作原理。在这里您需要阅读和消化Spring IoC的工作原理:http://docs.spring.io/spring/docs/3.0.x/reference/beans.html

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

这取决于您如何设置项目。 通常,您需要使用

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