Java for Enterprise和Spring Framework的发展紧密地联系在一起。 两者相互依存,部分复制了好的概念。 在表1中,您可以看到一个简化的时间表,其中包含Java平台企业版和Spring框架的一些关键里程碑。
该表说明,仅将Java EE v6与Spring v3.0进行比较是有意义的。 Spring Framework和J2EE的早期版本已过时,并且Java EE v7仍未发布(实际上延迟到2013年第二季度 )。
表1:Java平台和Spring框架的时间表
年 | Java平台,标准版 | Java平台企业版 | Spring框架 | 关键 里程碑 |
2000 | J2SE v1.3 | J2EE v1.2.1 | EJB 2 –困难的部署描述符 –困难的测试 –很多多余的工件 | |
2001 | J2SE v1.3 | |||
2002年 | ||||
2003年 | J2SE v1.4 | J2EE v1.4 | ||
2004年 | Springv1.0 | 第一个Spring框架 –依赖注入(IoP) –没有Java EE应用程序服务器 -J2EE的竞争对手 | ||
2005年 | Springv1.2 | |||
2006年 | J2SE v5 | Java EE v5 | Springv2.0 | Java EE 5(EJB 3.0) –许多功能受Spring启发 –消除了组件,家庭和远程接口 |
2007年 | Springv2.5 | |||
2008年 | ||||
2009年 | Java SE v6 | Java EE v6 | Springv3.0 | Java EE 6(EJB 3.1) –接口是可选的 –单例豆 –类似cron的调度 –嵌入式容器 Spring3.0 –Spring表达语言 –具有改进的REST支持的MVC框架 |
2010年 | ||||
2011年 | Java SE v 7 | Spring v 3.1 |
因此,在表2中列出了Spring Framework的主要构建块。 控制容器的反转是Spring框架的核心功能。 要了解其工作原理,您还可以检查一个基于Spring框架的最小Java应用程序 (示例代码使用Spring 2.5.6.A,但主要原理与Spring 3.0相同)。
表2:Spring v3.0框架的选定构建基块
控制容器倒置 | –控制反转 –依赖注入 –使用XML文件和/或注释进行配置(自动接线) |
模型-视图-控制器框架 | –域对象(模型) -通常,JSP模板(视图) -DispatcherServlet作为Controller的前控制器 |
面向方面的编程框架 | –涉及各方面问题的基本AOP –基于拦截,并在运行时进行配置 –使用XML文件和/或注释进行配置 |
批处理框架 | -处理大量的记录或任务,包括:日志记录,跟踪,事务,作业管理,资源管理,异常转换 |
数据访问框架 | –为流行的框架提供支持 – JDBC,iBatis,Hibernate,JDO,JPA,Oracle TopLink,Apache OJB和Apache Cayenne |
交易管理框架 | –抽象机制(JTA仅支持嵌套事务和全局事务,并且需要应用程序服务器) |
远程访问框架 | –使用Java平台上可用的各种基于RPC的技术来进行客户端连接和在服务器上导出对象 |
来源和进一步阅读: http : //en.wikipedia.org/wiki/Spring_Framework
在表3中,列出了Java平台企业版6的主要标准和组件。 该表清楚地表明Java EE 6包含许多标准,而不仅仅是一个框架。
表3:Java EE 6体系结构的选定构建块
图片来源 Java EE 6教程 ,p39 | 客户端机器 – Java Server Faces(JSF 2.0) – JSP标准标记库(JSTL) –具有JavaServer Faces技术的Ajax – Facelets(XHTML) –支持表达语言(EL) –组件和页面的模板 – Java Servlet技术(Servlet 3.0) –国际化和本地化Web应用程序 Java EE服务器 – Enterprise JavaBeans(企业Bean)组件 – JAX-RS RESTful Web服务 – JAX-WS Web服务端点 –企业Bean作为POJO(会话和消息驱动) –作为POJO的托管Bean –拦截器 – Java依赖注入(JSR 330) –上下文和依赖注入,CDI(JSR 299) –最小化部署描述符需求的注释 –会话Bean中的异步方法调用 –声明和程序安全 – Java消息服务(JMS)API – Java持久性API实体 坚持不懈 – Java数据库连接API(JDBC) – Java持久性API 2.0 – Java EE连接器体系结构 – Java交易API(JTA) |
来源和进一步阅读: http : //olex.openlogic.com/wazi/2010/get-started-with-jee6/
几年前,当我开始学习Spring Framework 3.0时,我实现了一个带有许多Spring功能的小型Web应用程序。 老实说,这比完成这项任务所必需的更多。 这个小型应用程序具有用于单元和集成测试自动化的大量测试代码。 它具有100%的线路和分支覆盖率。 一段时间后,我决定基于Java EE 6架构实现完全相同的应用程序以比较这两种方法。这两种技术都运行良好,代码大小几乎相同,并且具有良好的可维护性。
一个重要的区别是对测试的支持。 Spring Framework对测试提供了出色的支持,而Java EE 6在此存在一些弱点。 对于Java EE 6,您可以使用Embedded Glassfish,但是这种方法烦人(缓慢(嵌入式容器的启动时间很长))并且配置麻烦。 Spring Framework的另一个突出功能是易于集成旧应用程序。 逐步地更新旧应用程序比较容易,例如,一开始就使用JDBC,事务管理和IoC的一小部分。
结论
- 从体系结构的角度来看,Spring和Java EE的模型是竞争者。 取决于组织的策略和约束,两者都会显示出优点和缺点。
- 通常不建议将两者结合使用,因为这既浪费EJB容器功能和/或难以维护。 在某些选定的情况下,在Java EE 6应用程序中使用Spring Framework的Building Blocks是有意义的,例如Spring Batch,Data Access。
- Spring框架不是标准-它是框架的产品和实现。 这意味着,没有其他供应商。 请记住这一点。
参考: 轻量级Java企业体系结构– Spring 3 Framework与Java EE 6之间的不公平且不完整的比较,来自我们的JCG合作伙伴 Markus Sprunck,位于Software Engineering Candies博客上。
翻译自: https://www.javacodegeeks.com/2012/05/spring-3-and-java-ee-6-unfair-and.html