java - 使用 Spring 的模块化 Web 应用程序

标签 java spring tomcat web-applications modular

我想创建一个分为如下结构的扩展的 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/

相关文章:

java - 使用java识别文件扩展名

java - Spring Security @WithMockUser 不适用于 cucumber 测试

java - Spring Boot 应用程序不会 Autowiring 字段

java - Tomcat 为其他打开的 eclipse 项目中的类抛出 ClassNotFound 异常

html - 即使映射,我也无法访问 servlet

java - 如何使用附加包扩展 BndTool 存储库?

java - 解析数据 org.json.JSONException 时出错 - Java

java - 我如何从网站提取一些数据并通过电子邮件发送

java - 未找到 persistence.xml - 使用 NoSql 数据库的 Gradle-Spring-MVC 项目

java - Tomcat 内存缓存 - 集群上的复制