Spring 系列怎么学 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
CaptainD
V2EX    Java

Spring 系列怎么学

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

    最近接手了些 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   9
    利好这个网站 https://www.pdai.tech/
    Jiecolo
        7
    Jiecolo  
       2022-08-25 13:34:49 +08:00   2
    这个网站你值得拥有 https://www.baeldung.com/
    m8syYID5eaas8hF7
        8
    m8syYID5eaas8hF7  
       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 反射了解注解的实现
    lllllliiii
        18
    lllllliiii  
       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
    反应式: 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     Solana     5479 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 03:08 PVG 11:08 LAX 19:08 JFK 22:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86