我想创建一个分为如下结构的扩展的 Web 应用程序:
- 核心
- 后端 A - 取决于核心(也可能是后端 B)
- 后端 B - 取决于核心和后端 A
- 前端 A - 取决于后端 A 和 B
- 前端 B - 取决于后端 A 和 B
它们应该在 Tomcat 中运行。现在我的问题是我仍然想提供从它所依赖的扩展注入(inject)服务的能力。此外,两个前端应该使用后端扩展中定义的每个服务的相同实例。如果扩展的配置可以完全基于注释(WebApplicationInitializer 和 @Configuration),那将是一个很酷的功能。
我尝试过的:
- 将核心扩展和后端扩展创建为 WebApplications 不起作用,因为它们有自己的类加载器和上下文,无法进行注入(inject)
- 将扩展作为库导出到 tomcat 并将它们包含到每个 Frontend-WebApplication 中并不能确保服务相同,而且基于注释的配置也不起作用
解决这个问题的最佳方法是什么?
最佳答案
如果您想使用 Tomcat,共享 Spring 上下文的唯一选择是仅设置一个 WebApplicaiton(由 WebApplicationInitializer 初始化)。当然,您仍然可以拥有带有自己的 @Configuration 类的单独模块(也称为 jar),但这些配置必须合并到 Web 应用程序中。
如果您决定使用 EAR 打包,将会更加灵活。然后,您仍然可以拥有两个独立的 WAR,具体取决于核心和后端服务。然后核心和后端服务可以作为父 Spring 上下文共享(通过使用 beanRefContext ),并且两个 war (前端 A 和前端 B)将扩展此上下文
关于java - 使用 Spring 的模块化 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21365456/