【问题标题】:Can't we use spring for distributed java applications?我们不能将spring用于分布式Java应用程序吗?
【发布时间】:2012-04-18 13:18:21
【问题描述】:

这是一个面试问题。

面试官问我是否可以将 spring 用于所有目的,并且不使用任何 Java EE 框架。

我说是的,但他问我应用程序是否分布式以及应用程序服务器的意义何在。

我不确定答案。

Spring 能做 Java EE 框架所做的一切吗?

【问题讨论】:

    标签: java spring jakarta-ee


    【解决方案1】:

    嗯,春天很宽。所以你可以逐点复习。我不是 Java EE 方面的专家,但我确信 Spring 可以涵盖很多(如果不是全部)Java EE 问题。而且我很确定 Spring 可以处理应用程序中的大部分层/问题。

    首先是春季国际奥委会。您可以使用 Spring IOC 配置对象图。它有助于在任何层配置实现层所需的所有组件。

    Spring-MVC-Web:您可以配置 MVC Web 组件以处理和服务所有 Web 应用程序请求。我认为你可以用它做一些很酷的事情。使用其他业务元素(包括 IPC - 进程间通信)配置 Web 响应及其必要配置。

    Spring Security 是 Acegi 的遗产。它是一个 Web 框架,用于定义对 Web 资源的角色定义访问。

    我不确定 Hessian 是否也是 Spring 的。无论如何,它是轻量级的,它有助于与其他进程中的组件进行通信 la RMI

    嗯...我不确定持久性,但我认为 Spring 有用于 JDBC、Hibernate 等的模板,所以无论如何它都可以提供帮助(如建议所示:JmsTemplate 和 RestTemplate 可用于与其他业务组件进行通信!)。

    这里的核心思想是:您可以从头开始制作应用程序,因此在所有情况下,Spring 都可以提供一个框架来缓解每一层上的困难/重复任务。春天会吗?是的。

    请检查其他功能,看看 Spring 是否有它的功能。我敢打赌。

    【讨论】:

    • 它还有用于消息队列的 JmsTemplate。它有用于调用休息服务的 RestTemplate。因此,JMS 或 REST 均可用于进行进程外调用。
    【解决方案2】:

    深入来说,Java EE 是一组规范(其中一些是由 Spring 团队贡献的!)

    Spring 的使命宣言是“简化 Java 开发”

    它使用以下技术做到这一点:

    1. POJO -> 便于测试
    2. DI -> 促进松散耦合
    3. AOP -> 促进关注点分离、可维护性等
    4. 模板 -> 提供标准编程模型,为您完成繁重的工作

    Spring 和 Java EE 没有“Vs”关系。

    使用上述技术,Spring 框架可以让您更高效地构建基于 (Java EE) 标准的应用程序。

    >Does spring do everything that the Java EE framework does ?
    

    根据我上面所说的,这个问题可以改写为'Spring 是否支持/实现了构成 Java EE 规范的所有技术?' - 不,但它确实做到了它的目标,那就是简化大多数 Java EE 技术的开发。

    也就是说,Java 开发的这种简化的权衡是,您现在需要掌握大量(Spring 框架)知识在您的指尖......(伴随着实践和 google :))

    >Can't we use Spring for distributed java applications?
    

    当然可以。对于大多数可以想象的用例,Spring 有大量的 Exporters/FactoryBeans 和 Clients(Templates)。

    【讨论】:

      【解决方案3】:

      是的,Spring 可以在没有 Java EE 的分布式应用程序中使用。我们已经使用它在一个 XA 事务中向 MQ 发送消息和更新数据库。

      根据这篇文章,Spring 绝对可以在分布式应用程序中单独使用。

      http://www.wrox.com/WileyCDA/Section/Why-Use-the-Spring-Framework-.id-130098.html

      http://www.artima.com/forums/flat.jsp?forum=276&thread=204508

      【讨论】:

      • “开箱即用”使用 J2EE 并不是一个有吸引力的选择。 J2EE 没有为应用程序代码提供易于使用的视图。这就是应用程序框架的作用,例如 Spring。 .....Spring 使您能够享受 J2EE 的主要优势,同时最大限度地减少应用程序代码遇到的复杂性。 - wrox 文章与你所说的相矛盾
      【解决方案4】:

      从历史上看,(5 年前?)Spring 在分布式应用程序领域很薄弱,尤其是数据库集群。这不再是一个问题。我想说的是,Spring 在分布式计算方面走得更远,因为他们正在大力追求 Java EE 尚未接近的云技术。

      【讨论】:

        【解决方案5】:

        在我看来,Spring 的主要好处是它摒弃了 Java EE 框架中一些更重量级的组件(实体 Bean、会话 bean),并用轻量级替代方案取而代之。

        在我看来,Spring 的主要优点之一是它解耦了许多组件,然后使用 XML 或注释将它们连接在一起。这使得编写单元测试变得容易(通过注入模拟组件而不是真实的组件),这在使用重量级 Java EE 组件时并不容易(无法轻松地对 EJB 2.1 实体 Bean 进行单元测试)。

        很多 Spring 概念已经进入 Java EE 标准,所以我认为 Java EE 不再是重量级的选择,Spring 将与 Java EE 组件一起工作,例如应用服务器管理的连接池(通过 JNDI) 、事务管理器、队列管理器,可以很容易地使用应用程序服务器进行管理,这些应用程序服务器可以提供额外的功能,例如集群、故障转移、负载平衡、服务 Web 资源......

        话虽如此,Spring(VMWare)背后的人有自己的应用服务器(tcServer),它基于 Apache Tomcat,提供了很多 spring 使用的粘合剂,但并不像一些传统的应用服务器(Websphere、Weblogic)。

        【讨论】:

          【解决方案6】:

          我不这么认为。基本上 Spring 是关于 Java EE 框架之间的集成。

          【讨论】:

            【解决方案7】:

            为此使用弹簧集成框架。

            使用可以使用 Akka 框架来管理具有 Spring 集成的分布式应用程序。

            Akka 使用 Actor 模型和软件事务内存来提高抽象级别并提供更好的平台来构建正确的并发和可扩展的应用程序。

            查看分步教程,其中提供了有关如何使用 Akka 框架构建分布式应用程序的更多信息。

            一般来说,分布式应用程序是使用 Java-RMI 在 Java 中构建的,Java-RMI 在内部使用 Java 的内置序列化在节点之间传递对象。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-03-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-09-03
              • 2021-02-19
              • 1970-01-01
              • 2016-01-07
              相关资源
              最近更新 更多