Spring Boot从零入门1_详述

本文属于原创,转载注明出处,欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 xiaobaiai.nethtml

[TOC]java

1 开始以前

在开始学习Spring Boot以前,我以前从未接触过Spring相关的项目,Java基础仍是几年前自学的,如今估计也忘得差很少了吧,写Spring Boot本身的学习过程前,同时给一块儿学习的同窗们作个鼓励,相信本身可以学好,大概了解了下Spring的整个发展,仍是有不少铺垫知识是要知道的,并且就算知道,没有实践经验可能仍是不可以很深刻的体会实际项目中有什么不同。总之,干就是了,而后就是坚持走下来,至于为何要学习Spring Boot,这也是我本身的一个选择,架构之路中一环,武功中的一个大招,期待学会这个大招。Spring Boot已是Spring的最上层了,从上而下,重新到旧,打通整个Spring脉络。react

2 名词术语

固然学习以前,确定要去调研一番,了解各类跟Spring相关的名词术语,由于实在太多了,若是不去了解,对后面的学习也会形成困惑,难以理解,尤为是从未接触过Java Web,咱们所学习跟Spring相关的知识最终都是如何更好更快的构建企业级Web应用。下面是我学习前所了解的一些名词术语和该术语所扮演的功能角色解释。nginx

名词术语 释义
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 框架是由 struts二、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 更好的结合

概念仍是有点多的,而是基本指的大的软件框架的概念,具体到其中每个均可以延伸出不少知识,更多能够参见参考连接详细了解。不过这只是开始,之后能够慢慢了解,并在实战中了解每个术语自己所具备的特性。web

3 Spring Boot特性与优缺点

既然我选择了从上而下,重新而旧的方式去入手,那么咱们对Spring Boot须要更多的了解,以及Spring Boot在整个技术栈中扮演了什么角色?spring

Spring Boot的口号是BUILD ANYTHING WITH SPRING BOOT,用Spring Boot构建一切!sql

从官方网站上的构件图能够看出,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能给我带来什么好处或者限制呢:apache

  • 对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端网站xiaobaiai.net

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/
    本文属于原创,转载注明出处,欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 xiaobaiai.net
相关文章
相关标签/搜索