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

时间:2015-06-18 07:32:23

标签: java spring java-ee

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

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

什么类型的远程处理适合这里?理想情况下,我可以想象有一种机制,我可以只使用"后端服务类也在前端,spring将代理连接在一起。但是如何?

4 个答案:

答案 0 :(得分:1)

你想要解耦后端和前端,直到那里很好。你想把它们放在同一个tomcat上的单独战争中,仍然可能,但它有影响。

但是现在你想从后端向前端注入bean。如果他们处于不同的战争中,则不再可能。即使在相同的tomcat上,每个战争如果完全独立于另一个,它们应该只通过网络进行通信(通常通过Web服务)。

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

  • 两者之间的单一战争。前端将包含视图和控制器层,服务后端和持久层。耦合由您在控制器中注入的服务接口提供。这是一个单一的Web应用程序
  • 每个人都在自己的战争中作为2个独立的Web应用程序。前端将具有与先前情况相同的视图和控制器层,以及将向后端发送REST请求的瘦服务层。并且后端将具有相同的服务和持久层,在以前的情况下,没有视图层和REST控制器来处理来自前端的请求。

对于低到中等负载,第一个解决方案将使用少一点的资源,但是在非常大的负载下,第二个解决方案可以扩展到前端和后端的服务器场(在前端和数据库服务器之前不说反向代理)在后端后面)

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

是的,您可以从jar / war加载外部spring-context.xml以获取bean,请检查此答案here

答案 3 :(得分:0)

您可以将弹簧豆绑定到JNDI并在前端接收此对象 http://docs.spring.io/autorepo/docs/spring/3.2.3.RELEASE/javadoc-api/org/springframework/jndi/JndiTemplate.html#bind%28java.lang.String,%20java.lang.Object%29

但是在这个解决方案中,两次战争的脱钩并没有真正成功。当必须在同一个容器中部署时,我没有看到在两个war文件中分隔前端和后端有什么好处。

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