我是 spring 的新手,目前正在努力理解在当前项目中使用现有 spring 项目所需的设置
我有一个 spring 项目,它具有与数据库和网络服务通信的所有服务。
我正在编写一个需要与数据库和网络服务对话的新应用程序。
我想在另一个项目中重新使用现有的实现。
我将该项目包含在当前项目的构建路径中。
但是我遇到了依赖注入(inject)错误。 现在我有点想看看我当前项目设置中需要的所有其他文件,以便我可以重新使用现有项目。
我是否需要将其他项目的上下文文件导入当前项目?如果可以,有人可以指点我可以引用的文档吗?
最佳答案
我会试一试。希望我能澄清你的问题... =D
当您说“我将该项目包含在当前项目的构建路径中。”时,我假设您将一个 spring web 项目添加为另一个 spring web 项目的依赖项。总之,您不能将一个 spring web 项目添加为另一个 spring web 项目的依赖项。让我们先花点时间了解如何连接一个 bean 以在 spring 容器中进行注入(inject)...
当你使用 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 注入(inject)到哪个 bean。如果您使用注释方法,您应该有一个标记来扫描所有现有的@Component(及其派生注释)注释类,然后使用@Inject 或@Autowired 注释来注入(inject)声明的实例(bean)。例如:
<context:component-scan
base-package="org.companyname.webappname" />
<context:annotation-config />
到目前为止,我一直在解释的是如何在 spring 容器中声明一个 bean。仅当您在 spring 容器中声明一个 bean(当 Web 服务器启动时存在于 spring 容器中)并指定应将其注入(inject)哪个类时,才会发生“注入(inject)”。
现在你有两个 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
关于java - 如何将一个spring项目包含到另一个spring项目中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22355301/