学这些理论知识真的非常枯燥, 纵然我有一颗很强的求知欲, 但确实也经常感觉块顶不住了, 曾经一度怀疑自己的学习方法是否存在问题, 一度搜索这一类问题 "我该如何学习XXX", 看了里面的回答后, 便按照里面的方法来学一会儿, 自欺欺人罢了.
今天无意间看到一篇文章, 里面讲到了学习一个技术之前, 你应该问自己的三件事
这项技术是什么,为什么我要学习这项技术,学习了这项技术有什么好处。
如果你在学习某项技术的时候无法回答上面的三个问题。再过几天,你很大程度上会忘记这项你所“学过”的技术。比如说,如何你连“为什么要用多线程”你都无法用通俗的话来解释清楚。即便你当时学习的时候知道多线程可以用xxx方式来创建,多线程的xxx的api。那再过两个月,人家问你”Java多线程有什么用啊?”。你想想你还能答什么,我认为你是记不住“多线程可以用xxx方式来创建、多线程的xxx的api”这些知识点了。再比如说,如果学习Spring时不知道IOC和new对象有什么区别,那我为啥不直接new对象而要那么麻烦去学Spring呢?
于是我换了一种方法问自己, 我为什么要学Spring Boot?
我的答案很纯粹, 我想自己做一个能拿得出手的项目, 不是那种控制台下的贪吃蛇, 也不是那种低配版连连看.
我想讲我对分布式系统的热爱落地, 在spring cloud 中发挥它的作用, 但学spring cloud还是得先学spring boot.
接下来, 我依次回答那三个问题.
1. Spring 是什么?
一个利用了IoC(控制反转)和DI(依赖注入)降低了各个模块间的耦合性, 简化应用开发的轻量级框架
2. 我为什么要学它?
上面已经说了.
3. 学了它有什么好处呢?
这里spring团队已经在官网告诉了我们答案
Spring是一个非侵人性(non-invasive)框架,其目标是使应用程序代码对框架的依赖最小化,应用代码可以在没有Spring或者其他容器的情况下运行。 Spring提供了一个一致的编程模型,使应用直接使用POJO开发,从而可以与运行环境(如应用服务器)隔离开来。 Spring推动应用的设计凤格向面向对象及面向接口编程转变,提高了代码的重用性和可测试性。 Spring改进了体系结构的选择,虽然作为应用平台,Spring可以帮助我们选择不同的技术实现,比如从Mybatis切换到其他ORM工具,从SpringMVC切换到Struts,尽管我们通常不会这样做,但是我们在技术方案上选择使用Spring作为应用平台,Spring至少为我们提供了这种可能性和选择,从而降低了平台锁定的凤险。
谈谈IoC容器
spring的核心就是IoC. 也就是Spring反向控制应用程序需要的资源, DI就是应用程序依赖Spring为其提供资源
打个比方来讲,使用IoC后相当于IoC就是一个饮品店;以前的我们需要自己new对象,也就是需要自己买橙子,买榨汁机来榨果汁喝;而是用IoC后,我们只需要把需求(想喝橙汁)告诉它,然后由它给我们提供橙汁就可以了。
谈谈spring boot
springboot这个东西,与其说叫框架,不如说叫脚手架。它的核心内容无非是starter思想,将各种框架通过starter的标准装配结合起来。比如说mybatis想在springboot里用就得有mybatis的starter,你自己写的组件如果想用springboot的想法去装配那就得自己封装一套starter。把装配原理搞明白之后,其实springboot除了自集成web容器之外,也就没剩下啥东西了