Java 带Spring的模块化web应用程序

Java 带Spring的模块化web应用程序,java,spring,tomcat,web-applications,modular,Java,Spring,Tomcat,Web Applications,Modular,我想创建一个web应用程序,该应用程序分为以下结构的扩展: 核心 后端A-取决于核心(可能是后端B) 后端B-取决于核心和后端A 前端A-取决于后端A和B 前端B-取决于后端A和B 他们应该骑着雄猫跑。现在我的问题是,我仍然希望提供从它所依赖的扩展注入服务的能力。另外,两个前端应该使用后端扩展中定义的每个服务的相同实例。如果扩展的配置可以完全基于注释(WebApplicationInitializer和@configuration),这将是一个很酷的特性 我所尝试的: 将核心和后端扩展创建

我想创建一个web应用程序,该应用程序分为以下结构的扩展:

  • 核心
  • 后端A-取决于核心(可能是后端B)
  • 后端B-取决于核心和后端A
  • 前端A-取决于后端A和B
  • 前端B-取决于后端A和B
他们应该骑着雄猫跑。现在我的问题是,我仍然希望提供从它所依赖的扩展注入服务的能力。另外,两个前端应该使用后端扩展中定义的每个服务的相同实例。如果扩展的配置可以完全基于注释(WebApplicationInitializer和@configuration),这将是一个很酷的特性

我所尝试的:

  • 将核心和后端扩展创建为Web应用程序是行不通的,因为它们有自己的类加载器和上下文,不可能进行注入
  • 将扩展作为库导出到tomcat并将其包含到每个前端Web应用程序中并不能确保服务是相同的,而且基于注释的配置也不起作用

解决这个问题的最佳方法是什么?

如果您想使用Tomcat,共享Spring上下文的唯一选择就是只设置一个WebApplicationOn(由WebApplicationInitializer初始化)。当然,您仍然可以使用自己的@Configuration类拥有单独的模块(也称JAR),但这些配置必须合并到web应用程序中


如果你决定使用耳朵包装,它会更灵活。然后,根据核心和后端服务,您仍然可以拥有两个独立的WAR。然后核心和后端服务可以作为父Spring上下文共享(通过使用),两个war(前端a和前端B)将扩展此上下文

是否要将这些模块作为单独的war文件部署?不一定。事实上,最终每个扩展都应该能够访问其他扩展。只是出于好奇,你说‘万一我想使用Tomcat’,你对此有何建议?这是关于war文件的——如果你想使用ear包装,你可以使用TomEE