28
337 天前
4
用不用 Spring 开发对于我来讲都差不多,实际 Java EE 规范本身一直也在发展,对于一些说用 Spring 开发效率高的说法,我不认同。对于熟悉 Java EE 规范的人,用纯粹的 Java EE 规范和 Spring 没太大差别,我要说的是 Spring 本身离不开 Java EE 规范,并且 Spring 集成很多规范(比如 JSR330,JSR303 等),Spring 也可以调用 EJB 等。
j2ee/Java EE/Jakarta EE 规范以前最大的痛点是 EJB 2 太难用,这也是 Spring 作者抨击 J2EE 的重点,Spring 的原型就是他那本书 J2EE Development without EJB 的源代码上发展起来的。
但是 2006 年 Java EE 5 的发布,带来全新的 EJB 3 编程模型和新的 JPA1.0 规范。这时候 Spring 优势已经不大如以前了。要知道,EJB 生来具有分布事务是 Spring 的硬伤,现在 Spring 的一些方案都是把事务操作 Delegates 到第三方库上,和 Java EE 容器内管理事务完全没法比。
Java EE 5 后的很长一段时间我一直在用 JBoss Seam 写程序,对于 [ [写企业应用] ] ,全部使用 Stateful Bean,JavaEE 优势太明显。当时很多技术讨论在围绕 [ [有状态] ] 的应用还是 [ [无状态] ] 的应用好。面对 JBoss Seam 等有状态的框架的压力,Spring 开始自身也作了调整,Scope 更加丰富了,不再单纯的 Singleton 和 Prototype 。另外 Spring 宣布 JSF 为 Spring WebFlow 下一等公民,地位超过自己的 Spring MVC 。
09 年 Java EE 6 发布,带来 CDI,大部分 Seam 的概念都体现在 CDI 中。但是 Oracle 收购 SUN,Java EE 开始乏力,Java EE 8 可能是个有史以来最失败的例子,发布时间拖了 4,5 年,大部分初期的 Proposals 都被否决,停滞了 2 年后,草草的就发布了,相当一个 Java EE 7 更新吧。在 Oracle 停滞的那两年,Redhat,IBM 等把初期那些好的 Proposals 拾起来,成立了新的 Microprofile 规范。
好消息是,Java EE 8 后规范领导权移交给了 Eclipse 基金会,完全由社区领导。Jakarta EE (由于 Java 版权问题,Java EE 改名了) 和 Microprofile 开始联手下一代规范。目前 Microprofile 规范发展很快,很多新的东西很快就吸收了,比如 reactive streams,OpenAPI,GraphQL 等。
Spring Boot 作为一个 Glue 层,很多时候是蹭了 Microservice,Cloud Native,12Factor Application 的热度,另外不得不说的是 Spring Boot 1.x 大量的借鉴了 Dropwizard,甚至 Include 了一些 Dropwizard 的成果。的确用 Spring Boot 开发,让傻子程序员都能够上手,一旦出现什么要改内部机制,配置的问题,一些人就开始傻眼了。不管你觉得 Spring 怎么方便,你必须懂 Java EE/Jakarta EE 规范。