Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从外部战争中注入春豆?_Java_Spring_Jakarta Ee - Fatal编程技术网

Java 如何从外部战争中注入春豆?

Java 如何从外部战争中注入春豆?,java,spring,jakarta-ee,Java,Spring,Jakarta Ee,我想创建一个解耦的前端(vaadin)和后端(spring)。两者都应该运行在相同的tomcat应用服务器上,但每个都是一个war,因此我可以重新部署前端,而无需重新启动后端 我希望最小化两个应用程序之间的远程处理代码以交换数据。因此,我认为我可以将服务bean从后端注入前端war。但这有可能吗?如何在两个war文件/java项目之间共享服务声明 什么样的远程处理在这里是合适的?理想情况下,我可以想象有一种机制,在这种机制中,我可以在前端“使用”后端服务类,而spring可以将代理联系在一起。但

我想创建一个解耦的前端(
vaadin
)和后端(
spring
)。两者都应该运行在相同的
tomcat
应用服务器上,但每个都是一个
war
,因此我可以重新部署前端,而无需重新启动后端

我希望最小化两个应用程序之间的远程处理代码以交换数据。因此,我认为我可以将服务bean从后端注入前端
war
。但这有可能吗?如何在两个war文件/java项目之间共享服务声明


什么样的远程处理在这里是合适的?理想情况下,我可以想象有一种机制,在这种机制中,我可以在前端“使用”后端服务类,而spring可以将代理联系在一起。但是怎么做呢?

如果我正确理解了您的问题,您希望将前端代码与后端代码分开

您可以做的是创建后端实现的
.jar
文件,并在前端从XML或Java应用程序上下文实例化bean

如果您不想为配置中的每次更改重新部署应用程序,我更愿意使用XML配置


在前端代码中,您必须包含后端jar,您可以用常规的Spring方式调用这些服务。

是的,您可以从jar/war加载一个外部Spring-context.xml,为了获得bean,请检查这个答案。

如果您想将后端和前端解耦,请继续。你想把它们放在同一个tomcat上的不同战争中,这仍然是可能的,但它有影响

但现在您希望将bean从后端注入前端。如果他们处于不同的战争中,那就不可能了。即使在同一个tomcat上,每一场战争如果完全独立于另一场战争,它们也只能通过网络(通常通过web服务)进行通信

您有两个可用的解耦级别:

  • 一场对双方都有利的战争。前端将在这里包括视图和控制器层、服务后端和持久层。耦合由注入控制器的服务接口提供。这是一个单一的web应用程序
  • 每个应用程序在其各自的war中作为两个独立的web应用程序。前端将具有与前一种情况相同的视图和控制器层,以及一个将向后端发送REST请求的瘦服务层。后端将具有与前一种情况相同的服务和持久性层,没有视图层和REST控制器来处理来自前端的请求

对于低到中等负载,第一个解决方案将使用较少的资源,但在真正巨大的负载下,第二个解决方案将更具可扩展性,具有前端和后端服务器群(更不用说前端前的反向代理和后端后的数据库服务器)

您可以将SpringBean绑定到JNDI,并在前端接收此对象。

但在这一解决方案中,两场战争的脱钩并没有真正成功。当必须在同一个容器中部署时,在两个war文件中分离前端和后端并没有任何好处


我更喜欢在前端和后端之间部署一个war文件或与REST通信

你正在进入JavaEE领域。你不能@injection一个类从WAR到另一个类,因为它们占用不同的类装入器。我想得越多,它听起来就越愚蠢。