java - 如何将一个spring项目包含到另一个spring项目中

标签 java spring spring-mvc dependency-injection

我是 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/

相关文章:

java - 如何在 JmsMessagingTemplate.sendAndReceive 上设置等待超时

spring - 添加编码到@GetMapping

java - 400 错误请求 - 将 JSON 数据发布到使用 Spring MVC 实现的 RESTful Controller 时

java - 如何让 Spring 为类上的同一个 validator 显示不同的基于验证包的消息?

json - Spring Data Rest 不明确关联异常

java - 使用 spring-boot-starter-integration 时找不到 org.springframework.integration.Message

Java队列和线程安全

java - 覆盖抽象字段 Java

java - 为什么我的 Arrays.sort 不起作用?

java - 所有验证消息都可以在带注释驱动的 hibernate 验证中看到