| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> SpringBoot的核心原理(扒笔记记录) -> 正文阅读 |
|
[Java知识库]SpringBoot的核心原理(扒笔记记录) |
这一课的主要重点:
从Spring到SpringBoot? ? ? ? 我们在工作中都可能用过了SpringBoot,特别是最近几点,Java开发者大军里的一员,我们一般可能上手就是SpringBoot。但是大家有没有想过,为什么有了Spring技术以后,又搞出来一个SpringBoot,为了搞清楚这个问题,我们来简短回顾一下Spring的发展过程:特别是装配这块和功能这块。 ????????简单来说,Spring从差不多20年前就开始,只有XML的配置,这种全局化的一个XML文件。或者分开几个文件然后通过input方式,在汇总成一个文件。这种全局的配置方式,慢慢地就进化到可以使用注解的方式。我们把配置分散到我们具体的一些类的文件上,在类上面加注解。比如说:@Service、@Componet、@Repository。这样的一些注解。再接下来我们有了配置类(@Configuration),我们有了所谓的@Bean的注解,我们就可以把一些注解放到方法上。在方法的级别上让所有的这些方法的返回值,变成我们的Spring容器里的对象,Spring里的Bean。进而进一步地让Bean的配置更加的灵活、更加的分散,力度越来越小了。这样一来,在使用更灵活的同时,其实带来了一个大麻烦,就是我们所有的注解其实满天飞。你都不知道你现在Spring容器加载起来以后,你的这些Bean到底在哪里、哪里配置的,乱了。这个其实只是一个表象,如果我们再追更深一层来看待这个问题,它本质的原因其实是Spring整个技术体系整个框架,加上它上面集成的各种功能,越来越庞大,越来越复杂,越来越臃肿。Spring从1.0、2.0、2.5、3.0、3.1然后四点几,到现在的五点几,这个过程中不断地在添加新的功能新的组件,慢慢地Spring自己内部,整合各种不同的技术,就像Messaging、JMS集成其他的AMQP、RabbitMQ、Kafka等乱七八糟的。Spring整个技术体系组件越来越多,已经是成百上千个了,这个时候我们使用Spring整个技术体系的时候,就会带来很多的副作用。它本身就变得很复杂、很庞大、很臃肿了。特别是2010年以后,这个问题越来越突出,以至于有时候我们就认为Spring大概在2002 03年的时候横空出世,作为当时反对更庞大更臃肿的J2EE、EJB体系的这样的一个屠龙的勇士站出来,经过了10多年的发展,它自己本身看起来也变成了一条恶龙。所以这个时候Spring体系本身很臃肿很庞大,很多人就在思考,我们怎么能够简化Spring的使用。Spring本身它的目标是使Java开发变得更简单,它现在自己变复杂了,那么很多人自然就会想到了,怎么给他减负。所以这一切,就是SpringBoot发展的一个动力,具体来说就三点:怎么让开发变得更简单、怎么让配置变得更简单、怎么让运行变得更简单。 ? ? ? ? 说到这里就不得不提一个概念,就是什么是限定性框架和非限定性框架?Spring本身其实是一个非限定性框架,什么意思呢。就是他像是一些原始的材料,你拿到一些面粉,你加了水,发了面,和了面以后,包饺子,做包子,蒸馒头干什么都可以。他不限制你的使用,也不限制你到底要把它跟别的什么东西,什么馅儿,还是没有馅儿,还是炸油条,跟什么东西混在一块来用。你想怎么搭配怎么搭配。你可以改里面的任何东西。这是所谓的非限定情况下对你不做任何限制。什么叫限定性框架。比如说你已经搭配好的一个脚手架SSH,这简单的来看,就可以看作是一个限定性框架。有一些关键的技术选型已经帮你选好了。帮你选好的意思就是说,就这么搭配的,这个面是用来炸油条的,不能包饺子。它里面对着各种别的东西,发酵粉、碱、加的水的比例等,就是配合好了用来做油条的。简单来说限定性框架用途相对来说要更窄,但是它把一些基础的东西已经帮你选好了,这时候就不会让你有所谓的选择困难症,或者是让你从头再去搭配比例。简单来讲限定性框架其实是在现有的各种原材料的基础上做了一个初步的整合,正是这种整合能够让我们不用所有东西从头开始,从去磨面粉甚至是种小麦那个层次开始,我们从中间这个步骤就可以接下来来干我们想做的事情。 ????????在Spring的具体的领域上,其实国内国外都中间有很多尝试,比如说国内在早期有一个著名的框架,江南白衣的SpringSide,他就尝试了在我们的当前这个项目的脚手架里,把各种常见的RPC的,MQ的各种组件全都集成进去,变成一个依赖的模块,然后你想使用的时候把SpringSide拿过去,基于他的基础上你就可以相当于选择你想用的这几个组件直接来用了。但是当时各种这种简化其实做的并不是很彻底,因为条件没有成熟,第二方面Spring团队,Spring技术体系本身对这块,没有一些特别直接和特别好的支持。最终一直到SpringBoot的出现,SpringBoot其实引入了两个最大的改进点:因为SpringBoot同时考虑了站在Spring框架的内和外来看我们应该怎么来简化Spring本身。这块最终采取了一个优化的最大的特点是:约定大于配置。什么意思呢,举例来说,就像我们用JVM的时候,跟大家讲过,JVM内置的命令行参数,各种调入的参数,有1000多个,实际上我们不使用任何一个参数,直接用java命令,-jar运行一个jar包或者Java HelloWorld就可以运行起来一个类,不需要配置任何参数,为什么可以这样,原因就在于约定大于配置。所有的参数基本上都有默认值,如果我们没有配置的话,没有配置那些参数没有指定他们的值那么就使用默认值,当我们在Spring体系里面,一方面,我们引入所有的参数配置,用这种使用默认值约定大于配置。另外呢,我们各种组件先关的整合,组建的搭配,也是用这种约定大于配置。那么很多东西自然而然的就被SpringBoot把他给整合,把框架和框架,技术和技术,中间差的这层裂缝给粘合了。所以SpringBoot很多时候我们看做他是一个整体的粘合剂。 SpringBoot如何做到简化:? ? ? ? 所以我们要总结一下SpringBoot为什么能够做到Spring开发的技术做到极致的简化。原因可以归纳为四点:
SpringBoot是Spring的一套快速配置脚手架,关注与自动配置,配置驱动。 什么是SpringBoot????????我们零零总总的说了这么多,可能有些同学还会比较模糊,SpringBoot到底是个啥。我们这里调一下书袋,这些内容都是SpringBoot官网上的内容: ? ? ? ? SpringBoot使创建独立运行、生产级别的Spring应用变得容易,你可以直接运行它。我们对Spring平台和第三方库采用限定性视角,以此让大家能在最小的成本下上手。大部分SpringBoot应用仅仅需要最少量的配置。 ? ? ? ? 这句话什么意思呢,SpringBoot做出来的程序一般情况下都是可以直接运行的,独立部署的,不需要web容器的。就是一个大包,也不需要各种依赖,不仅在开发环境是这样,你把这个大的包挪到生产环境,生产环境的服务器上只要有JDK,有JVM,都可以把它run起来。我们对Spring平台和第三方视角采用限定性视角,以此让大家在最小的成本下上手。什么意思,就是说,里面组合集成的各种框架,各种技术都是SpringBoot的团队已经帮我们组装好了,默认开箱即用。如果有些组装好的你不想用,你想用另外的,对不起,默认这套东西是不支持的。当然你可以用我们后面讲到的各种自定义starter这类技术和引用第三方的额外的starter技术。把他拼装起来也是支持的。但是默认这套东西,帮你搭配好了,你可以在里面选,但超出这块的他默认是不支持的。为什么这样,还是为了让我们约定大于配置。让我们使用的代价最小,帮你搭配好了原材料。最后一句,大部分SpringBoot的应用仅仅需要最少量的配置。基于前面那些特性,自然而然的有这一句了。所以使用起来非常方便了。我们像Spring1.0/2.0/2.5/5.6之类的版本里面,动辄上千行的XML相关的Spring配置,现在可以简化到几乎没有了。 ????????然后我们再来看下SpringBoot的六个官方提供的功能特性:
? ? ? ? 当然这里没有说全,实际上远远不止六个,第一个是创建独立运行的Spring应用,第二个直接嵌入Tomcat或Jetty,UnderTow,无需部署WAR包。像最新的版本Spring 5里面的WebFlux,内置的WebServer,是基于Netty的。第三个提供限定性的starter依赖简化配置,其实就是他自己拼装好的脚手架,比如跟Mybatis,Hibernate之类的这样的一些集成都提供好了现成的供starter直接拿来即用。第四个在必要时自动化配置Spring以及其他的第三方依赖库,很多的框架和框架之间整合,如果我们之前都是自己来搭框架,自己来做项目骨架,就会发现项目和项目之间,整合之间我们要做大量的工作,相当于在中间抹胶水抹水泥,把他们合到一起去。现在统统不需要你做了。SpringBoot帮你全都做好了。第五个,提供生产production-ready特性,例如指标度量,健康检查,外部配置等。也就是说在生产环境下已经部署好,正在运行的这样的一些应用,提供了一些额外的指标的监控,服务是不是可用,外部的一些配置,甚至配置的一些更新相关的操作,都帮我们做好了,不仅仅让Spring只负责做开发,然后打包,系统的run起来之前的加载过程,现在甚至在系统运行的过程中,他也能帮我们做一部分的工作了。第六个,完全不需要XML配置了,全都是通过我们的注解或者Properties文件或者跟Properties文件等价的YAML配置文件。 ????????以上这块就是官方对SpringBoot这个项目,它的定位,它的功能,它的特点这一类进行的描述。通过这个我们就可以对SpringBoot这个框架有一个大致的认知。他能干什么,他的特点是什么,跟以前的Spring有什么样的不同。 ?快速构建基础Maven项目:? ? ? ? 刚才我们一直在说构建一个SpringBoot项目特别特别的容易,基本上你不需要干啥,从零开始就可以打出来一个框子了。脚手架就是线程的。 ????????具体怎么做,常见有两种方法:一种直接在我们的IDE里面,一般我们现代化的IDE都已经支持了直接用来创建SpringBoot的项目,另一种我们也可以用Spring官方网页上提供的一个initializr这样一个工具,选择你需要的各种环境参数,然后填上你再组织构建的名字,项目的名字,甚至去选一些你的依赖的官方各种搭配好的其他整合框架,比如说Mybtis像这种东西,最后点Generate,他就帮我们自动的把脚手架生成出来了。生成出来的是一个zip包。下载下来之后直接导入到我们的开发工具里就可以用了。 ? ? ? ? Group:组织的名字,io.github.yimba ? ? ? ? Artifact:当前这个构建的名字,demoidea ? ? ? ? Version:版本号,默认不用 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 9:46:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |