Spring Boot从零入门1_详述
本文属于原创,转载注明出处,欢迎关注微信小程序`小白AI博客` 微信公众号`小白AI`或者网站 [https://xiaobaiai.net](https://xiaobaiai.net)
![](https://img2018.cnblogs.com/blog/821555/201910/821555-20191029130643977-1180942280.jpg)
[TOC]
## 1 开始之前
在开始学习`Spring Boot`之前,我之前从未接触过`Spring`相关的项目,`Java`基础还是几年前自学的,现在估计也忘得差不多了吧,写`Spring Boot`自己的学习过程前,同时给一起学习的同学们做个鼓励,相信自己能够学好,大概了解了下`Spring`的整个发展,还是有很多铺垫知识是要知道的,而且就算知道,没有实践经验可能还是不能够很深入的体会实际项目中有什么不一样。总之,干就是了,然后就是坚持走下来,至于为什么要学习`Spring Boot`,这也是我自己的一个选择,架构之路中一环,武功中的一个大招,期待学会这个大招。`Spring Boot`已经是`Spring`的最上层了,从上而下,从新到旧,打通整个`Spring`脉络。
## 2 名词术语
当然学习之前,肯定要去调研一番,了解各种跟`Spring`相关的名词术语,因为实在太多了,如果不去了解,对后面的学习也会造成困惑,难以理解,尤其是从未接触过`Java Web`,我们所学习跟Spring相关的知识最终都是如何更好更快的构建企业级Web应用。下面是我学习前所了解的一些名词术语和该术语所扮演的功能角色解释。
名词术语 | 释义 |
---|---|
SQL & NOSQL | NOSQL,Not Only SQL, 非关系型的数据库统称,常见如HBase,BigTable,Redis,Cassandra,LevelDB,MongoDB,CouchDB;SQL这里泛指RDBMS,即关系型数据库管理系统,常见如Oracle,DB2,SQL Server,Mysql等 |
Nginx | Nginx是一款轻量级的Web服务器、正/反向代理服务器、负载均衡,邮件代理服务器和通用的TCP/UDP代理服务器,最初由俄罗斯人Igor Sysoev编写,BSD许可 。由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。 |
Jetty | Jetty 作为一个独立的Servlet 引擎可以独立提供Web 服务,但是它也可以与其他Web 应用服务器集成,所以它可以提供基于两种协议工作,一个是HTTP,一个是AJP 协议。与Tomcat相比各有特点,作为后起之秀,总是带着新鲜和快速成长的特性 |
Netty | Netty是异步事件驱动(NIO,非阻塞IO)的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。而提供类似功能的有Tomcat和Jetty,Tomcat是基于Http协议的,而Netty支持各种协议和定制协议,包括Http、Websocket、SSL&TLS、Protobuf、RTSP、zlib&gzip、LFS等;Netty更是一种网络编程框架,定制化开发更方便,类似的还有MINA |
Undertow | Undertow是一种用Java编写的灵活的高性能Web服务器,可提供基于NIO的阻塞和非阻塞API。同样的支持Http、Websocket协议 |
JDBC | Java DataBase Connectivity,java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。 |
JPA | JPA 伴随 Java EE 5 发布,Sun 官方提出的一套 Java 持久化规范,它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的局面。 |
Servlet | 在代码层面,Servlet其实就是一个接口,定义了一套处理网络请求的规范,所有实现Servlet的类,都需要实现它所定义的五个方法;在定义上,它就是一套Java EE规范,Tomcat & Jetty都是运载Servlet的容器 |
MyBatis | MyBatis 是一款优秀的持久层框架,MyBatis是iBatis的升级版,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 目前为止最新版本为3.5.3 |
Hibernate | Hibernate是一种ORM框架,全称为 Object Relative DateBase Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象,目前为止最新版本为 Hibernate ORM 5.4.7 |
struts2 | Apache Struts是一个免费的开源MVC框架,用于创建优雅的现代Java Web应用程序。它支持约定胜于配置,可以使用插件体系结构进行扩展,并且附带了支持REST,AJAX和JSON的插件。目前最新版本是2.5.20 |
Struts Spring Hibernate(SSH) | SSH 框架是由 struts2、spring、hibernate 三大框架组合起来的一套总框架;struts 的核心思想就是实现 MVC;Spring 的核心思想就是解耦,也就是代码中不出现 new 实现类的代码,我们创建了接口不用关心实现类是谁;hibernate 的核心思想就是(ORM - 对象关系映射) 连接数据库,我们不用在数据库写创建表的语句 |
Spring | 一个开放源代码框架,为JVM上的基于响应和基于servlet的应用程序提供端到端支持,使用基本的JavaBean代替EJB。是一个用于创建Java企业应用程序的流行框架。 它已经超越了最初的产品范围,涵盖了使用Spring框架并围绕Spring框架构建的整个项目系列。Spring的核心技术是依赖项注入(DI),事件,资源,i18n,验证,数据绑定,类型转换,SpEL,AOP。现在Spring框架已经发展到了5.0了 |
Spring MVC | Spring MVC是一个松散耦合的MVC框架,是Spring框架众多组件中的一个,是一个使你能够根据模型-视图-控制器设计模式实现Web应用程序的组件。而Struts是紧密耦合的。对于企业级应用程序,你需要构建松散耦合的应用程序,因为它会使应用程序更可重用,更健壮以及更分布式。 |
Spring WebFlux | 是Spring5中的新增模块,开发人员可以使用 WebFlux 创建高性能的 Web 应用和客户端,名称中的 Flux 来源于 Reactor 中的类 Flux,该模块中包含了对反应式 HTTP、服务器推送事件和 WebSocket 的客户端和服务器端的支持;在服务器端开发中,WebFlux 支持两种不同的编程模型:第一种是 Spring MVC 中使用的基于 Java 注解的方式;第二种是基于 Java 8 的 lambda 表达式的函数式编程模型 |
Spring Cloud | Spring Cloud为开发人员提供了工具,以快速构建分布式系统中的某些常见模式(例如,配置管理,服务注册和发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,群集状态,负载均衡)。微服务架构集大成者,云计算最佳业务实践。Spring Cloud基于Spring Boot实现,使用HTTP的RESTful风格API作为调用方式。它所包含的多个子项目共同构建了微服务架构体系,总体来说,Spring Cloud相比Dubbo内容更丰富,而且社区和生态相比也较Dubbo好,不过学习成本相对Dubbo要高 |
Dubbo | 阿里巴巴在2011年开源,2013年停止更新,但在2017年9月又重启维护并发布了新版本,Dubbo采用Zookeeper作为注册中心,RPC作为服务调用方式,致力于提供高性能和透明化的RPC远程服务调用方案。它与Spring无缝集成,基于服务提供方(服务端)与服务调用方(客户端)角色构建简单模型,其优点是使用方便、学习成本低 |
Spring Cloud Data Flow | 将企业连接到物联网—移动设备,传感器,可穿戴设备,汽车等。Spring Cloud Data Flow提供了用于创建可组合数据微服务的统一服务,这些微服务可解决流和基于ETL的数据处理模式。 |
Reactive stack & Servlet stack | Spring5 提供了 Servlet 和反应式这两种 Web 技术栈,在应用层面充分向异步和非阻塞并发靠拢。 |
微服务 | 微服务是一种分布式系统架构,是一种思想,是一种设计原则,Spring Cloud是开发微服务的主流方案,而Spring Boot以Spring Cloud为核心,让开发微服务更快捷方便;开发微服务框架还有Netflix OSS(微服务实践鼻祖)、Dubbo、gRPC等 |
Service Mesh(服务网格) | 服务间通信的基础设施层,可以将它比作是应用程序或者说微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控,相关Service Mesh开源项目有Linkerd、Envoy、Istio、Conduit、nginMesh、Kong等,与微服务相比,微服务更像是一个服务之间的生态,专注于服务治理等方面,而服务网格更专注于服务之间的通信,以及和 DevOps 更好的结合 |
概念还是有点多的,而是基本指的大的软件框架的概念,具体到其中每一个都可以延伸出很多知识,更多可以参见参考链接详细了解。不过这只是开始,以后可以慢慢了解,并在实战中了解每一个术语本身所具有的特性。
## 3 Spring Boot特性与优缺点
既然我选择了从上而下,从新而旧的方式去入手,那么我们对`Spring Boot`需要更多的了解,以及`Spring Boot`在整个技术栈中扮演了什么角色?
`Spring Boot`的口号是`BUILD ANYTHING WITH SPRING BOOT`,用`Spring Boot`构建一切!
![](https://img2018.cnblogs.com/blog/821555/201910/821555-20191029130644392-674724587.png)
从官方网站上的构件图可以看出,`Spring Boot`是一个大容器,是构建所有基于`Spring`的应用程序的入口,`Spring Boot`旨在通过最少的Spring前期`配置`使得我们尽快启动并运行项目,例如`Spring Boot`对比`Spring MVC `最大的优点就是使用简单,约定大于配置,不会像之前用`Spring MVC`的时候,时不时被`xml` 配置文件搞的晕头转向。从这里看其实`Spring Boot`并不是我们构建Web应用的核心,也可以知道我们可以快速上手`Spring Boot`,但是我们却可以通过这个入口抽丝剥茧去了解它所包含的所有。我们可以列一下`Spring Boot`的特性:
- 可以使用`Spring Initializr`在几秒钟内快速入门
- 通过`Spring Initializr`(https://start.spring.io/),我们可以基于Web UI快速构建一个Spring Boot项目
- 构建输出任何内容:REST API,WebSocket,Web,流,任务等
- 总之就是Web相关都行!
- 简化安全策略集成
- 对SQL和NoSQL的非常友好的支持
- 支持运行期内嵌容器:Tomcat,Jetty和Undertow
- 非常轻松地开发和测试我们的Web应用程序
- 开发者生产工具,如LiveReload 和 Auto Restart
- 自动版本依赖管理
- 避免编写大量样板代码,注释和XML配置。
- 可用于生产的功能,例如跟踪,指标和运行状况
- 可以用你喜欢的开发IDE,如Spring Tool Suite(STS)、IntelliJ IDEA(IDEA)或NetBeans等
- 它提供了CLI(命令行界面)工具,可以非常轻松快捷地从命令提示符处开发和测试`Spring Boot`(Java或Groovy)应用程序
- 提供了许多插件
- 可使用Maven和Gradle等构建工具非常轻松地开发和测试Spring Boot应用程序
- 可以非常轻松地与嵌入式数据库和内存数据库一起使用
有了上面的这些特性,`Spring Boot`能给我带来什么好处或者限制呢:
- 对Spring进行了`包装`,使得易于理解和开发Spring应用,简化配置、测试、打包和集成第三方工具
- 快速配置项目,管理依赖版本,快速配置单元测试,集成测试等,提高开发效率和生产率
- 只能解决类似`Spring Framework`的问题,而不能解决新的问题,即`Spring FrameWork`能做的就能做
- 将现有或旧版`Spring Framework`项目转换为`Spring Boot`应用程序会很费劲
## 4 总结
本篇从零开始详述了`Spring Boot`相关的名词术语,从零开始了解`Spring Boot`,并讲述了`Spring Boot`的特性与优缺点。通过对`Spring Boot`的详述,让我们对它有了一个基本的了解,接下来,我们开始进入`Spring Boot`的内部和实战。
## 5 更多
更多关于`Spring Boot`相关的学习,可以持续关注我的公众号`小白AI`或者微信小程序`小白AI博客`或PC端网站[https://xiaobaiai.net](https://xiaobaiai.net)。
![](https://img2018.cnblogs.com/blog/821555/201910/821555-20191029130644845-365161974.jpg)
## 6 参考资料
- https://nginx.org/en/
- https://www.jianshu.com/p/296bacba3510
- https://www.ibm.com/developerworks/cn/java/j-lo-jetty/index.html
- https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/index.html
- https://netty.io/
- https://stackoverflow.com/questions/6719004/understanding-servlet-container
- https://mybatis.org/mybatis-3/
- https://hibernate.org/orm/what-is-an-orm/
- https://struts.apache.org/
- https://spring.io/
- https://docs.spring.io/spring-boot/docs/current/reference/html/
- https://start.spring.io/
- https://spring.io/projects/spring-framework
- https://www.ibm.com/developerworks/cn/java/spring5-webflux-reactive/index.html
- https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#spring-webflux
- https://spring.io/projects/spring-cloud
- https://www.springcloud.cc/
- https://zhuanlan.zhihu.com/p/36182136
- https://www.infoq.com/articles/Servlet-and-Reactive-Stacks-Spring-Framework-5/
- http://www.reactive-streams.org/
- https://medium.com/clover-platform-blog/building-a-microservice-with-spring-boot-and-spring-cloud-1c8275d7d229
- https://jimmysong.io/posts/what-is-a-service-mesh/
- https://istio.io/
本文属于原创,转载注明出处,欢迎关注CSDN[freeape](https://blog.csdn.net/freeape)或微信小程序`小白AI博客` 微信公众号`小白AI`或者网站 [https://xiaobaiai.net](https://xiaobaiai.net)
Spring Boot从零入门1_详述的更多相关文章
- Spring Boot从零入门2_核心模块详述和开发环境搭建
目录 1 前言 2 名词术语 3 Spring Boot核心模块 3.1 spring-boot(主模块) 3.2 spring-boot-starters(起步依赖) 3.3 spring-boot ...
- Spring Boot从零入门3_创建Hello World及项目剖析
目录 1 前言 2 名词术语 3 创建Hello World项目 3.1 基于STS4创建项目 3.2 使用Spring Initializr Website创建项目并导入 3.3 基于Spring ...
- spring boot(一):入门篇
构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- Spring Boot(一):入门篇+前端访问后端
转自:Spring Boot(一):入门篇 什么是Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发 ...
- Spring Boot:快速入门教程
什么是Spring Boot? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人 ...
- Spring Boot【快速入门】简单案例
Spring Boot[快速入门] Spring Boot 概述 Build Anything with Spring Boot:Spring Boot is the starting point ...
- Spring Boot 2.x 入门前的准备-IntelliJ IDEA 开发工具的安装与使用
常用的用于开发 spring boot 项目的开发工具有 eclipse 和 IntelliJ IDEA 两种,最近有声音提出 visual code 也开始流行开发 java,而且确实如此, vs ...
- Spring Boot【快速入门】
Spring Boot 概述 Build Anything with Spring Boot:Spring Boot is the starting point for building all Sp ...
- Spring Boot 2.0 入门指南
0x01 什么是Spring Boot? Spring Boot是用来简化Spring应用初始搭建以及开发过程的全新框架,被认为是Spring MVC的“接班人”,和微服务紧密联系在一起. 0x02 ...
随机推荐
- svn新建文件不能提交的解决方法
svn新建文件不能提交的解决方法 在当前新建文件的目录下,右键空白处: 选择Properties 找到所有有ignore字眼的属性,查看这个属性的继承目录(inherited from),入我的是cl ...
- Tomcat+Nginx+Linux+Mysql部署豆瓣TOP250的项目到腾讯云服务器
写在前面 因为前面有写过一篇关于豆瓣的top250的电影的可视化展示项目,你可以移步http://blog.csdn.net/liuge36/article/details/78607955了解这个项 ...
- 性能测试:Jmeter-Beanshell请求加密实例
进行性能测试时,有可能遇到一种场景:接口请求由于安全问题,需要进行加密发送. 这种场景下,使用Jmeter实现性能测试,则也需要使用同样的加密规则发送请求报文. 要实现此类性能测试有几种策略: 直接去 ...
- 自学React 入门
刚开始学习React, 读了官网和别人的一些博客,总结了一部分内容,记录一下.有错误欢迎指正... 一.自定义组件需要了解知识 1. 组件分类 React中有两种类型的组件,一种是"方法组件 ...
- Python基础(十八)
今日主要内容 包 一.包 (一)什么是包 只要是含有__init__.py文件的文件夹就是一个包 包的本质其实就是一个文件夹,利用包将不同功能的模块组织起来,以此来提高程序的结构性和可维护性 包是用来 ...
- MySQL数据库从复制及企业配置实践
在实际生产中,数据的重要性不言而喻: 如果我们的数据库只有一台服务器,那么很容易产生单点故障的问题,比如这台服务器访问压力过大而没有响应或者奔溃,那么服务就不可用了,再比如这台服务器的硬盘坏了,那么整 ...
- Zookeeper监控(Zabbix)
一直在弄监控,这些个中间件Zookeeper.Kafka......,平时也只知道一点皮毛,也就搭建部署过,没有真正的用过,一般都是大数据的同学在用,作为运维人员我需要对他做一个监控,由于对他不是 ...
- springcloud --- spring cloud sleuth和zipkin日志管理(spring boot 2.18)
前言 在spring cloud分布式架构中,系统被拆分成了许多个服务单元,业务复杂性提高.如果出现了异常情况,很难定位到错误位置,所以需要实现分布式链路追踪,跟进一个请求有哪些服务参与,参与的顺序如 ...
- Android开发——实现子线程更新UI
Android中线程按功能分的话,可以分为两个,一个是主线程(UI线程),其他的都是子线程 主线程不能执行那些耗时过长的代码或任务(执行耗时过长的代码会出现应用未响应的提示),所以都是使用子线程来执行 ...
- 终端-Linux命令之非交互SSH密码验证-Sshpass
Sshpass是使用SSH所谓的"交互式键盘密码身份验证"以非交互方式执行密码身份验证的工具 通俗来说就是 使用ssh密码登录 是需要在连接时手动输入密码的,没办法明文连接,如下图 ...