2014-03-12 67 views
2

我是新来的春天,目前在理解需要在我当前的项目使用现有的Spring项目如何包括弹簧项目到另一个春天项目

我有拥有所有服务弹簧项目的设置挣扎用于与数据库和web服务进行通信。

我正在写一个新的应用程序,它需要与数据库和web服务进行交谈。

我想在其他项目中重新使用现有的实现。

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

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

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

回答

5

我给它一个镜头。希望我可以为您的问题带来清晰... = D

当您说“我将项目包含在当前项目的构建路径中”时,我假设您添加了一个spring web项目作为另一个项目的依赖关系春天web项目。总之,您不能将Spring Web项目添加为另一个Spring Web项目的依赖项。我们需要一些时间来了解如何连接一个豆腐做注射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容器,在获取base-project的spring容器来查找依赖spring web项目的packages/classes时会有问题。我建议你在移动的相关项目中的所有类到原项目只有一个Spring容器(一个web.xml文件)。

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

希望我不会混淆你。

你必须了解IoC容器是如何工作的。这里是你需要阅读和消化弹簧IoC如何工作的地方:http://docs.spring.io/spring/docs/3.0.x/reference/beans.html

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

+0

嘿,看看这个:http://www.javaworld.com/article/2077837/java-se/hello--osgi--part-1--bundles-换beginners.html – CodeBender

0

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

这方面的例子可以看出here(见如何将这个项目在自己的应用方向)

1

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

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