请问什么样的 Java 项目用 Spring 是比较好的?

2020-03-23 08:03:33 +08:00
 haohong725

Spring 到底解决的是什么类型的问题? 为什么写个 Spring 、Tomcat 、Junit 这种项目就不需要 Spring ?

7044 次点击
所在节点    Java
44 条回复
ARhen
2020-03-23 12:17:59 +08:00
@Oktfolio 不会的~ xml 那堆配置文件会先搞废我...哈哈
aguesuka
2020-03-23 12:35:32 +08:00
如果存在很多对象都只要 new 一次,或者每次 new 的参数都是固定的,那就适合 spring 。否则不适合。
araaaa
2020-03-23 12:56:18 +08:00
解决了码农不会写代码的问题
cwjokaka
2020-03-23 12:57:19 +08:00
大项目至少需要 spring 依赖注入的功能
kilen3a
2020-03-23 13:46:20 +08:00
当你想用框架但是有没有找到特别合适的时候
gnemux
2020-03-23 13:47:06 +08:00
盖房子需要用到『建筑工具』比如『电锯和搅拌机』,原则上只用『铁锤和小铲子』等也是能盖房子的,只不过从 0 开始太没效率了,打造建筑工具就是为了盖房子更快用的。

为什么造『电锯和搅拌机』的时候不用『电锯和搅拌机』? 因为建筑工具是用来盖房子的,要打造建筑工具的话,需要用更轻量的工具,比如『铁锤和小铲子』。
BruceTu
2020-03-23 14:27:47 +08:00
all in spring
hantsy
2020-03-23 15:05:20 +08:00
用不用 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 规范。
knives
2020-03-23 15:06:36 +08:00
对标 Spring 的话,个人目前用的是 Guice 。具体到 Web 项目使用的是 Dropwizard + Guice 这种冷门组合,原因是实在不爽 SpringMVC 的注解风格……
hantsy
2020-03-23 15:15:52 +08:00
IOC, AOP 这些也不是 Spring 特有的,Spring 出来同期有很多类似的 IOC 框架。Java EE 规范中,JAXRS,JSF,EJB 都有自己的 IOC 容器。现在 CDI 只是一个专有的 IOC,DI 规范,未来考虑规范互用问题,JAXRS,JSF 都会放弃自己的 IOC 容器,转而使用 CDI,EJB 规范慢慢会被弱化,拆分出来(比如 Timer/Schedule, Transaction, MessageBean )。
hantsy
2020-03-23 15:17:09 +08:00
@knives Dropwizard 我也用过,感觉还不错,但是后来项目全部移到 Spring Boot 了。
hunk
2020-03-23 15:19:10 +08:00
spring boot 几乎通吃一切吧。
api 接口,没问题,测试方便,web 页面,可选的也多。
主要是 JPA 这货,实现统一。
nodejs 世界,一会一个框架,得重新学,虽然大差不差,但终归有所不同,得适应。java 搞的是大一统,习惯了入门了,也就踏实了。
我在 py 和 node 中间游荡了好久,疫情期间才开始学 spring,感觉好用。
luckyrayyy
2020-03-23 15:28:09 +08:00
拿楼上的类比,Spring 就是电锯和搅拌机啊,你问电锯和搅拌机能用来建造哪些房子。那答案就是几乎所有房子,除非你限定条件要造小木屋,可能用不到搅拌机。
hantsy
2020-03-23 15:28:10 +08:00
@knives Spring 5.0 可以完全不用 MVC 那一套。
新的 RouteFunction 已经成熟了,支持 Servlet 和 WebFlux 。如果用 Kotlin DSL 的话,基本可以按自己的想法去 Wire Bean 。
JerryCha
2020-03-23 16:05:57 +08:00
Hello World
SaltedFish12138
2020-03-23 16:51:01 +08:00
个人看法,Spring 就是一系列解决方案(不止是 web 开发),而不是只解决一个问题的,所以,理论上只要是你要搞 Java/Kotlin, 都应该有对应的 Spring 解决方案。

最近没有研究 Java 的图形界面开发, 应该是用不到 Spring 的,如有错误,欢迎打醒。
hantsy
2020-03-23 19:26:33 +08:00
@SaltedFish12138 如果只用 IOC,一样可以将 Spring 用在 Android,Swing,JavaFX 上,Spring 官方以前还有一个 Android 项目,现在好像没维护了。
mejee
2020-03-23 20:31:13 +08:00
any
securityCoding
2020-03-23 21:10:54 +08:00
久经考验的工业框架...你值得拥有
mreasonyang
2020-03-23 21:41:14 +08:00
只要不是底层公用组件,都建议用 Spring,后人上手也快

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/655223

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX