Spring Boot从零入门1_详述

Stella981
• 阅读 477

本文属于原创,转载注明出处,欢迎关注微信小程序小白AI博客 和微信公众号别打名名或者网站 https://xiaobaiai.net 或者我的CSDN http://blog.csdn.net/freeape

Spring Boot从零入门1_详述

  • 1 开始之前

  • 2 名词术语

  • 3 Spring Boot特性与优缺点

  • 4 总结

  • 5 更多

  • 6 参考资料

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构建一切!

Spring Boot从零入门1_详述

从官方网站上的构件图可以看出,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博客或PC端网站https://xiaobaiai.net。

Spring Boot从零入门1_详述

6 参考资料

文章难免疏漏,而公众号上每篇文章只能修改几个字,所以我会在我的小程序小白AI博客上也发一遍,任何的错误,我会在及时修改,欢迎随时交流。

关注我的公众号,获取最新学习分享:

Spring Boot从零入门1_详述

本文分享自微信公众号 - 别打名名(biedamingming)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
浅梦一笑 浅梦一笑
4个月前
初学 Python 需要安装哪些软件?超级实用,小白必看!
编程这个东西是真的奇妙。对于懂得的人来说,会觉得这个工具是多么的好用、有趣,而对于小白来说,就如同大山一样。其实这个都可以理解,大家都是这样过来的。那么接下来就说一下python相关的东西吧,并说一下我对编程的理解。本人也是小白一名,如有不对的地方,还请各位大神指出01名词解释:如果在编程方面接触的比较少,那么对于软件这一块,有几个名词一定要了解,比如开发环
刚刚好 刚刚好
4个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
小森森 小森森
4个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本欢迎添加左边的微信一起探讨!项目地址:(https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n)\2.Bug修复更新日历2.情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意),\\和注意
晴空闲云 晴空闲云
4个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
3个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
Wesley13 Wesley13
1年前
MySQL查询按照指定规则排序
1.按照指定(单个)字段排序selectfromtable_nameorderiddesc;2.按照指定(多个)字段排序selectfromtable_nameorderiddesc,statusdesc;3.按照指定字段和规则排序selec
Stella981 Stella981
1年前
Angular material mat
IconIconNamematiconcode_add\_comment_addcommenticon<maticonadd\_comment</maticon_attach\_file_attachfileicon<maticonattach\_file</maticon_attach\
Wesley13 Wesley13
1年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
helloworld_28799839 helloworld_28799839
4个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue
helloworld_34035044 helloworld_34035044
7个月前
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为