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
是一个大容器,是构建所有基于Spring
的应用程序的入口,Spring Boot
旨在通过最少的Spring前期配置
使得我们尽快启动并运行项目。从这里看其实Spring Boot
并不是我们构建Web应用的核心,也可以知道我们可以快速上手Spring Boot
,但是我们却可以通过这个入口抽丝剥茧去了解它所包含的所有。我们可以列一下Spring Boot
的特性:
- 可以使用
Spring Initializer
在几秒钟内快速入门- 通过
Spring Initializer
(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。
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/