我是春天新手,目前正在努力了解在我当前项目中使用现有弹簧项目所需的设置
我有一个spring项目,它具有与数据库和Web服务进行通信的所有服务。
我正在编写一个新的应用程序,需要与数据库和Web服务进行通信。
我想过在另一个项目中重用现有的实现。
我将项目包含在当前项目的构建路径中。
但是我得到了依赖注入错误。 现在我有点想看看我当前项目设置中需要的所有其他文件,以便我可以重用现有项目。
我是否需要将其他项目的上下文文件导入到当前项目中?如果是这样,有人可以指向我可以参考的文档吗?
答案 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的一个示例(请参阅有关如何在自己的应用程序中包含项目的说明)