我目前正准备进行最后的项目研究。我必须开发一个用于管理人力资源的分布式应用程序,但在我使用的技术基准测试中,我发现在Spring或EJB 3.1之间做出决定会让人感到困惑。
我不知道哪种最适合和最容易使用。我是这两种技术的初学者,因此我希望有人可以帮助我。
答案 0 :(得分:58)
你不选择EJB和Spring,你实际上在Java EE和Spring之间做出选择,因为EJB只是Java EE的一部分,它还包括其他组件,如JMS,Servlets,JSP,JSF,CDI等。天(J2EE 1.4)Java企业版的编程模型有很多缺陷和缺陷,但最重要的是它很繁琐冗长,有大量的样板代码和大量的xml配置。引入Spring作为一种替代框架,有利于约定优于配置原则。换句话说,在Spring中,如果需要,可以重新配置一些合理的默认值。 Java EE 5引入了一些重大更改,采用了Spring提供的相同的约定配置原则,大大减少了实现工作所需的代码量和复杂性,因此在这方面Spring不再具有任何明显的优势。
记住Java EE只是一个规范也很重要。要构建一个真实世界的应用程序,你需要一个实现,今天有很多它们 - Glassfish,JBoss,TomcatEE等都提供了不同的Java EE规范实现,引入了额外的复杂性 - 我的意思是,现在你必须选择哪个Java EE实现选择。你可以使用来自单一来源的Spring来解决这个问题。
两个框架都为您提供了非常相似的功能。所有支持事务ORM都提供了构建业务逻辑,支持CDI,AOP的工具。在Spring和Java EE中,您只能使用所需的部分,换句话说,您不必使用整个框架。您甚至可以将它们一起使用 - 它们可以互操作。由于引入了可嵌入容器,您现在甚至可以在桌面应用程序(例如传统上是Spring的领域)中使用所需的Java EE功能。
但Java EE仍然缺乏Spring的一个领域是可测试性。为EJB编写单元测试并不容易 - 为此,您必须使用特殊的第三方框架(Arquillian)并在测试中编写一些样板代码(例如,用于构建测试部署包并将其部署到容器上等) )。实际上,Java EE缺乏对开箱即用的EJB测试的支持。相比之下,Spring考虑到了可测试性和TDD。测试Spring bean很容易,因为Spring包括对应用程序所有部分的测试(单元测试,集成测试)以及模拟的捆绑支持。