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

Spring 系列怎么学

  •  
  •   CaptainD · 2022-08-25 11:18:54 +08:00 · 6997 次点击
    这是一个创建于 582 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近接手了些 Java 项目,所以想系统学习下 Spring ,但其中遇到一些困难

    我遇到的问题

    • 对一些 Spring 的基础内容和 web 设计不太清楚,比如我看了 Spring 实战这本书,其中有一章讲到 Spring webflux ,因为我有 Spark 编程经验,所以看函数式编程和 lambda 可以理解,但是里面很多 Spring 注解我不知道是什么意思,对于 Spring 框架的 web 分层、设计模式也一头雾水

    • 我的理解是 webflux 使用异步的方式替换了 MVC 的线程池处理方式,提高了处理效率,有没有一些书籍或者文章在宏观上对 Spring 有一个完整介绍?大概某些框架是做什么,解决什么问题,Spring 实战其实有章节将这部分,但是我认为有点太简单了

    • Spring 系列有很多内容,我不可能都学,目前主流的技术方案是什么?

    我的习惯

    • 我能看懂英文文档,阅读官方文档也没问题,不过纯英文我会读的比较慢,所以更倾向于读中文,个别内容查英文
    • 我有 Python 经验,Java 语言层面的东西对我难度不大,但是 web 开发懂得不多
    35 条回复    2023-01-03 21:44:16 +08:00
    chrisia
        1
    chrisia  
       2022-08-25 11:28:12 +08:00
    千万别看 webflux 这部分内容,这块内容较难,资料也不多,用的也不多。建议先从传统 MVC 开始学起,这部分内容视频教程还是很多的吧。
    RedBeanIce
        2
    RedBeanIce  
       2022-08-25 11:32:30 +08:00
    其实楼主漏写了东西,你为什么要系统的学习 spring ,是为了面试还是什么,如果不写清楚,可能得不到正确的答案。
    msaionyc
        3
    msaionyc  
       2022-08-25 11:40:33 +08:00
    学 spring 的话,webflux 这块儿可以先略过,这不是它的特色和重点。
    Bingchunmoli
        4
    Bingchunmoli  
       2022-08-25 11:46:45 +08:00   ❤️ 2
    1. 推荐文档,速成就看培训机构的视频或者搜出来的项目实战
    2. ioc 解耦,aop 动态代理 它解决了横切面编程以及注入编程的窘境 site: https://blog.csdn.net/qq_41723615/article/details/89088901
    webflux 属于 spring-mvc-webflux 不属于 spring ,他是异步的 spring-mvc 解决方案
    3. spring ,spring-mvc ,springboot ; spring 是底层容器,springmvc 是 web 层框架 springboot 是脚手架一类的,快速开发。 主流方案是 springboot 直接部署,或者 springcloud 微服务(有 k8s(小公司多为阿里云商业化产品)或者自建集群)
    CaptainD
        5
    CaptainD  
    OP
       2022-08-25 11:56:53 +08:00
    @RedBeanIce 也许以后面试可以用上吧,不过目前一个是更好更快的完成公司项目,另一个像深入研究下 spring 体系和 Java web 工程,毕竟之前的数据开发主要侧重于脚本、notebook ,对工程理解还是不够
    JxQg597
        6
    JxQg597  
       2022-08-25 13:02:50 +08:00   ❤️ 8
    利好这个网站 https://www.pdai.tech/
    每一个知识点学完,手写个 Demo 。
    Jiecolo
        7
    Jiecolo  
       2022-08-25 13:34:49 +08:00   ❤️ 2
    这个网站你值得拥有 https://www.baeldung.com/
    LINEX
        8
    LINEX  
       2022-08-25 13:53:09 +08:00
    看 springboot 官网文档, 用 springboot 做一个简单的 demo 出来.
    能跑通一个单体的 springboot web 项目后, 可以试着搭建一套 springcloud 微服务框架出来.
    webflux 可以等深入理解以后再看, 实际工作里用的地方比较少, 并且有其他更好的解决方案.
    CaptainD
        9
    CaptainD  
    OP
       2022-08-25 13:57:13 +08:00
    @JxQg597 不错袄,大而全
    q447643445
        10
    q447643445  
       2022-08-25 13:59:34 +08:00
    就 spring framework , spring boot 学完就行了吧 其他的用到啥学啥.大差不差
    Kontinue
        11
    Kontinue  
       2022-08-25 13:59:35 +08:00
    @Jiecolo 哈哈 这个网站,每次 Google 的时候都会跳出来
    Kipp
        12
    Kipp  
       2022-08-25 14:02:54 +08:00 via iPhone
    Baeldung 太好了,想问下别的语言有类似的网站么
    CaptainD
        13
    CaptainD  
    OP
       2022-08-25 14:11:20 +08:00
    @Kipp 你点进去往下拉可以看到 Linux 、CS 、Scala Baeldung
    RedBeanIce
        14
    RedBeanIce  
       2022-08-25 14:12:11 +08:00
    每个人场景不一样,我只能简单的说下我自己的看法,没有深入思考这个问题,可能有很多疏漏

    @CaptainD
    1 ,个人建议,先利用视频或者官方文档玩一下 SSM 框架( spring,springmvc,mybatis ),学会使用之后
    2 ,可以看一下 GitHub 的 mini spring 。small spring 等等,你会很好的对 spring 基本运行等等有很多了解,(直接看 spring 源码可能看不懂)
    3 ,Java web 体系我不懂,告辞。。?有点太大了
    4 ,简单看一下 mini spring ,然后看看 spring 整合 mybatis ?顺便提前看看 mybatis ??

    感觉这几点下来,都要几个月了。
    CaptainD
        15
    CaptainD  
    OP
       2022-08-25 14:22:58 +08:00
    @RedBeanIce mini spring 这点没想到,简单看了一下感觉还不错,SSM 大四学过一点,当时毕业设计用 scrapy 爬了点数据,然后用 SSM 写了个小页面做显示,不过当时我很菜,写的挺垃圾,技术也没理解透,再加上毕业三年了,基本也都忘光了
    JxQg597
        16
    JxQg597  
       2022-08-25 15:03:10 +08:00
    @CaptainD 单纯的接手项目,会用一些工具包的功能就好了。这里推荐 [Hutool] 。
    如果想深入还是要学习 Java 基础的。
    - 学习工具包或者 Spring 框架源码,学习到不同功能用到不同的设计模式。
    - Java 面向对象可以了解到分层以及代码的高复用和低耦合。
    - Java 反射可以了解反射的实现以及这样设计的优势。
    - 主流单体用 SpringBoot 让你低配置快速上手 Spring 框架,微服务 SpingCloud 配合 RPC 组件(HTTP,Dubbo)。
    - WebFlux 我暂时没有用到,可以看看大佬有没有好的解释。
    - 框架学习可以看看 [凤凰框架] 。
    - ORM 可以看看 [MyBatisPlus] 。
    - 解决自己遇到的问题才能更好更快的学习。
    JxQg597
        17
    JxQg597  
       2022-08-25 15:06:51 +08:00
    @JxQg597 #16 反射了解注解的实现
    fzdwx
        18
    fzdwx  
       2022-08-25 15:14:47 +08:00
    就核心就是一个 AOP ,多写几个注解然后切一下大概就知道怎么玩了。整个 Spring 就是这个东西。
    commoccoom
        19
    commoccoom  
       2022-08-25 15:18:18 +08:00   ❤️ 1
    Spring 实战这本书一定要看第四版,这版的第一部分针对 Spring 写得最好,后面那几版都不太行。不适合入门。
    commoccoom
        20
    commoccoom  
       2022-08-25 15:19:37 +08:00
    @Jiecolo Baeldung 太赞了,我都当搜索引擎用了。
    n37r09u3
        21
    n37r09u3  
       2022-08-25 16:55:17 +08:00
    看国产 java 之父的视频。。。
    karott7
        22
    karott7  
       2022-08-25 17:25:55 +08:00
    Baeldung 真的很赞
    buruoyanyang
        23
    buruoyanyang  
       2022-08-25 17:26:02 +08:00
    这么说,我想完整的补充一下 webflux 、reactor 相关的知识,有无合适的书籍,其次是视频之类的推荐啊,各位大佬~
    chrisia
        24
    chrisia  
       2022-08-25 17:36:15 +08:00
    Baeldung 的文章质量非常高,google 也经常排前面哈哈
    yazinnnn
        25
    yazinnnn  
       2022-08-25 17:41:22 +08:00
    webflux 不如 resteasy reactive, reactor api 也远远不如 mutiny, 为什么不看看神奇的 quarkus 呢
    cyberkakashi
        26
    cyberkakashi  
       2022-08-25 19:10:59 +08:00 via Android
    问一下怎么收藏帖子啊,以后慢慢看
    cyberkakashi
        27
    cyberkakashi  
       2022-08-25 19:11:18 +08:00 via Android
    @cyberkakashi 找到了
    mmdsun
        28
    mmdsun  
       2022-08-25 23:13:37 +08:00
    反应式: https://www.v2ex.com/t/755754#r_10230522

    Spring 文档( Web Reactive 、Servlet 都有) :
    https://docs.spring.io/spring-framework/docs/current/reference/html/index.html

    目前主流还是 Web Servlet 。不过我也看到不少项目用 Reactive 的,而且 Reactive Streams 是 JDK9 加入的标准。
    框架的 web 分层、设计模式、分包,直接学习 DDD 。

    其实现在 DDD 也不是最好的设计,现在的选择有很多:
    https://herbertograca.com/2017/07/03/the-software-architecture-chronicles/
    lmafiamm
        29
    lmafiamm  
       2022-08-26 12:08:12 +08:00
    @n37r09u3 是雷丰阳还是余胜军呢?( 抖个机灵
    cco
        30
    cco  
       2022-08-31 11:39:25 +08:00
    https://www.baeldung.com/ 看楼上发了,我就下发一遍,我是看了不少这个网站。另外学习的话,快速入门就看看 B 站的视频,由简到难,甚至有些项目你只需要会有些皮毛就能应付了。
    Createsequence
        31
    Createsequence  
       2022-09-21 16:29:41 +08:00   ❤️ 2
    这段时间也在看 Spring ,关于文章楼上已经提了不少了,这里我从个人的角度分享一点经验。

    如果没有明确的目标,但是希望能够通过阅读源码,使得自己具备一定在工作或者面试中处理 Spring 相关的问题的话,从下面两点上手可能是比较快并且收益比较大的:

    1 、Spring 容器的启动:入口是八股文说烂了的 refresh() 方法,不过把这个流程看懂,可以搞明白:
    ( 1 )了解 Spring 容器的体系:包括整个 BeanFactory 和 Application 体系的整体设计,以及一部分组件的存在(是的,知道这玩意存在可能本身也是一种收获);
    ( 2 )了解很多关键步骤发生的时机:比如配置文件的加载,环境的切换,国际化处理、事件的机制,以及一部分钩子函数调用;

    2 、Bean 的创建:这个也是被八股文说烂的,不过确实也很重要,看懂以 getBean 方法的调用开始的整个 Bean 创建流程,可以搞明白:
    ( 1 )配置文件上的 Bean 到底是怎么完成依赖注入变成容器里面的 Bean 的(废话);
    ( 2 )一堆钩子函数,比如各种 PostProcossor 、Aware 还有其他回调的触发时机,这点尤其重要,因为 Spring 本身就是通过这边的各种回调把五花八门的功能缝合在一起的;
    ( 3 )进一步了解 Spring 容器的各种组件 /机制,以及这些它们所支持的功能,比如别名、FactoryBean ,三级缓存,还有类型注入(泛型解析机制),甚至是各种工具类;

    从个人体验上来说,这两部分的 Spring 最核心的功能,先了解会对后续阅读 MVC 、AOP 、事务、事件等内容(一起其他八股文)会很有帮助,并且,如果平时会有需要在 Spring 环境下开发各种工具类和通用组件的需求,看完以后也会有一些新的感悟,发现一些新的玩法。
    beishengjiang
        32
    beishengjiang  
       2023-01-03 21:41:59 +08:00
    @Jiecolo 这个网站怎么用,请教一下你的最佳实践。我英语比较差,开谷歌网页翻译可以用起来吗?
    beishengjiang
        33
    beishengjiang  
       2023-01-03 21:42:46 +08:00
    @Kipp 这个网站怎么用起来呀,感觉都是英文的摸不到头脑,麻烦指教一下
    beishengjiang
        34
    beishengjiang  
       2023-01-03 21:43:29 +08:00
    @karott7 这个网站怎么用起来呀,求个最佳实践
    beishengjiang
        35
    beishengjiang  
       2023-01-03 21:44:16 +08:00
    @chrisia 这样的吗,看来都是英语水平高的大佬,我都没 Google 到过
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4861 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 09:43 · PVG 17:43 · LAX 02:43 · JFK 05:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.