V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
haohong725
V2EX  ›  Java

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

  •  
  •   haohong725 · 2020-03-23 08:03:33 +08:00 · 7046 次点击
    这是一个创建于 1707 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    44 条回复    2020-03-24 10:58:16 +08:00
    KsAigg
        1
    KsAigg  
       2020-03-23 08:11:15 +08:00
    大小通吃 ,别问,问就是。。。。
    Cbdy
        2
    Cbdy  
       2020-03-23 08:27:07 +08:00
    普通的项目,比如 xx 管理系统
    hand515
        3
    hand515  
       2020-03-23 08:30:59 +08:00
    大部分的 Java 项目,只要你想用 spring,都可以
    chendy
        4
    chendy  
       2020-03-23 08:36:17 +08:00   ❤️ 2
    文档第一句话:'Spring makes it easy to create Java enterprise applications'
    重点是 application,tomcat 和 junit 都不是 application
    baozijun
        5
    baozijun  
       2020-03-23 09:04:50 +08:00
    大小项目 spingboot 都可以一把梭
    hhhsuan
        6
    hhhsuan  
       2020-03-23 09:05:46 +08:00 via Android
    后端
    BBCCBB
        7
    BBCCBB  
       2020-03-23 09:08:32 +08:00
    真都能梭.
    stormynight
        8
    stormynight  
       2020-03-23 09:11:26 +08:00
    你需要了解 spring 有什么用,然后按需取用
    Tinyang
        9
    Tinyang  
       2020-03-23 09:16:40 +08:00
    Spring 主要是实现了一系列的 Java ee 规范,理论上如果你的项目需要用到一些 Java ee 的功能都可以使用 Spring 。原先在 Spring 没出现的时,这些 Java ee 功能主要由一些企业级容器(weblogic...)来实现
    rockyou12
        10
    rockyou12  
       2020-03-23 09:18:23 +08:00
    核心的 ioc 和 aop 两大功能哪里都能用……
    passerbytiny
        11
    passerbytiny  
       2020-03-23 09:27:37 +08:00   ❤️ 1
    JDK 8 / Java SE / Java ME / Java EE(Jakarta EE):核心 / 底层 / 基础 。
    Spring / Tomcat / Junit / Storm / Hbase:系统级应用程序 / 工具
    Application based on Spring or Jakarta EE:业务级应用程序。

    至于为什么不用 Spring 写 Spring,原因很简单,Java 本身就不是自述语言。
    inwar
        12
    inwar  
       2020-03-23 09:52:50 +08:00 via Android
    spring 是 aop ioc 的一个实现,用的到就上,crud 业务开发尤其是,效率高,解耦好
    大部分底层框架都不会依赖其它重量级的框架,除了 spring 系外
    Java 不也只有 web😉
    ARhen
        13
    ARhen  
       2020-03-23 10:59:25 +08:00
    想了想 离开 spring 我可能写不了 java 项目😂
    Jooooooooo
        14
    Jooooooooo  
       2020-03-23 11:03:39 +08:00
    spring 就是 aop, 有这个需求就都可以, 人家把架搭好了自己写起来也方便
    licoycn
        15
    licoycn  
       2020-03-23 11:07:50 +08:00
    ioc
    JasonLiHai
        16
    JasonLiHai  
       2020-03-23 11:21:08 +08:00
    灵魂少不了
    Oktfolio
        17
    Oktfolio  
       2020-03-23 11:43:43 +08:00
    @ARhen Servlet 加注解其实也还好,缺点嘛...不支持 RESTful 。
    wozhizui
        18
    wozhizui  
       2020-03-23 11:47:29 +08:00
    @xixinjiejie 问就是一把梭呗!
    jaylee4869
        19
    jaylee4869  
       2020-03-23 12:02:51 +08:00
    Spring 解决的问题核心是依赖注入和控制反转。
    mawerss1
        20
    mawerss1  
       2020-03-23 12:08:03 +08:00
    我的理解是类比较多的情况下,比如你要写一堆单例模式的类,就可以用依赖注入来快速开发,
    ARhen
        21
    ARhen  
       2020-03-23 12:17:59 +08:00
    @Oktfolio 不会的~ xml 那堆配置文件会先搞废我...哈哈
    aguesuka
        22
    aguesuka  
       2020-03-23 12:35:32 +08:00 via Android
    如果存在很多对象都只要 new 一次,或者每次 new 的参数都是固定的,那就适合 spring 。否则不适合。
    araaaa
        23
    araaaa  
       2020-03-23 12:56:18 +08:00 via iPhone
    解决了码农不会写代码的问题
    cwjokaka
        24
    cwjokaka  
       2020-03-23 12:57:19 +08:00
    大项目至少需要 spring 依赖注入的功能
    kilen3a
        25
    kilen3a  
       2020-03-23 13:46:20 +08:00
    当你想用框架但是有没有找到特别合适的时候
    gnemux
        26
    gnemux  
       2020-03-23 13:47:06 +08:00   ❤️ 1
    盖房子需要用到『建筑工具』比如『电锯和搅拌机』,原则上只用『铁锤和小铲子』等也是能盖房子的,只不过从 0 开始太没效率了,打造建筑工具就是为了盖房子更快用的。

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

    最近没有研究 Java 的图形界面开发, 应该是用不到 Spring 的,如有错误,欢迎打醒。
    hantsy
        37
    hantsy  
       2020-03-23 19:26:33 +08:00
    @SaltedFish12138 如果只用 IOC,一样可以将 Spring 用在 Android,Swing,JavaFX 上,Spring 官方以前还有一个 Android 项目,现在好像没维护了。
    mejee
        38
    mejee  
       2020-03-23 20:31:13 +08:00
    any
    securityCoding
        39
    securityCoding  
       2020-03-23 21:10:54 +08:00
    久经考验的工业框架...你值得拥有
    mreasonyang
        40
    mreasonyang  
       2020-03-23 21:41:14 +08:00
    只要不是底层公用组件,都建议用 Spring,后人上手也快
    nutting
        41
    nutting  
       2020-03-23 21:50:34 +08:00
    最基本的对象之间的依赖关系管理。另外就是各种领域得集成,web,db 什么的都提供封装了。
    kassadin
        42
    kassadin  
       2020-03-23 22:23:35 +08:00
    你看其他帖子和这个帖子的回复量,有坑不用自己趟
    hq136234303
        43
    hq136234303  
       2020-03-24 00:17:21 +08:00
    spring 简单的来说就是把一些开发简单化 。
    gaigechunfeng
        44
    gaigechunfeng  
       2020-03-24 10:58:16 +08:00
    把梭,别问
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1170 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:09 · PVG 02:09 · LAX 10:09 · JFK 13:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.