我可以使用已添加为 JAR 依赖项的应用程序中的控制器吗?
Posted
技术标签:
【中文标题】我可以使用已添加为 JAR 依赖项的应用程序中的控制器吗?【英文标题】:Could I use controllers from an application that has been added as a JAR dependency? 【发布时间】:2021-07-19 22:01:00 【问题描述】:我正在开发 Springboot 应用程序 (app_A),该应用程序持有另一个 SpringBoot 应用程序 (app_B) 的 Maven 依赖项。 在我的 app_A 中,我需要使用 App_B 中的控制器。有可能这样做吗?如果是,如何实施? 谢谢
【问题讨论】:
这取决于 B 是否也被包装为 Spring Boot 应用程序(即,一个可运行的 jar,然后否)。如果它是碰巧使用 Spring Boot 的常规 jar(即不可运行的 jar),那么可以。从你的问题来看,我会说选项1在这里起作用,所以没有。如何更改阅读the reference guide。 感谢@M.Deinum 的回复!我已经使用docs.spring.io/spring-boot/docs/current/reference/htmlsingle/… 生成了一个可以用作依赖项的 JAR。可以从 appA 访问 appB 中的类(例如使用导入)。所以我关心的是使用或调用 appB 的控制器。例如,在 appA 的 thymeleaf 代码中使用已在 appB 的控制器中设置的 Model 属性。请注意,appB 已创建一个 SpringBoot 应用程序,而不是一个模块。 【参考方案1】:这是一个非常常见的场景,程序员需要将一些代码从现有的应用程序堆栈中分离出来。
您可以在app A depends on module B
或app A consumes app B's rest APIs
中执行此操作,但您不能让app A depends on app B
。一个Springboot应用(A)永远不能依赖另一个Springboot应用(B),也就是说应用(B)不能出现在A的依赖中。
新模块
构建一个名为 artifactId module-b
的新模块。请注意,我们正在构建一个 模块 而不是 Springboot 应用程序。您不能为此使用 Spring 初始化程序。
让 App A 依赖于模块 B
在A的maven依赖中,添加模块B。
在模块 B 中编写控制器
例如,您现有的 App A 控制器被放置在 A 中,例如 com.example.foo.BarController
。在模块 B 中,您编写新的控制器,例如 com.example.foo.AnotherController
。
【讨论】:
感谢@justthink 的回复!如果我想将我的 AppB Spring boot 应用程序更改为 Module 怎么办?我到底应该考虑什么?以上是关于我可以使用已添加为 JAR 依赖项的应用程序中的控制器吗?的主要内容,如果未能解决你的问题,请参考以下文章