一文带你走进微服务基石SpringBoot:简介+产生背景+目标+新特性

Spring Boot简介

在Java开发领域,Spring Boot算得上是一颗耀眼的明星了。自Spring Boot诞生以来,秉着简化Java企业级应用的宗旨,受到广大Java开发者的好评。特别是微服务架构的兴起,Spring Boot被称为构建Spring 应用中的微服务最有力的工具之一。Spring Boot中众多的开箱即用的Starter,为广大开发者尝试开启一个新服务提供了最快捷的方式。

Spring Boot产生的背景

众所周知,Spring 框架的出现,本质上是为了简化传统Java企业级应用开发中的复杂性。作为Java企业级应用开发的规范一-Java EE,从诞生之初就饱受争议。特别是EJB ( Enterprise JavaBeans )作为Java 企业级应用开发的核心,由于其设计的复杂性,使之在J2EE架构中的表现一直不是很好。EJB 大概是J2EE架构中唯-一个没有 兑现其能够简单开发并提高生产力承诺的组件。

正当Java 开发者已经无法忍受EJB的臃肿不堪的时候,Spring 应运而生。Spring 框架打破了传统EJB开发模式中以bean为重心的强耦合、强侵人性的弊端,采用依赖注人和AOP (面向切面编程)等技术,来解耦对象间的依赖关系,无须继承复杂的bean,只需要POJOs ( Plain Old JavaObjects,简单的Java对象)就能快速实现企业级应用的开发。为此,“Spring 之父”Rod Johnson还特意撰写了Expert one on-one J2EE Development without EJB一书,来向EJB宣战,从而业界掀起了以Spring为核心的轻量级应用开发的狂潮。

Spring框架最初的bean管理是通过XML文件来描述的。然后随着业务的增加,应用里面存在了大量的XML配置,这些配置包括Spring框架自身的bean配置,还包括了其他框架的集成配置等,到最后XML文件变得臃肿不堪、难以阅读和管理。同时,XML文件内容本身不像Java文件一样能够在编译期事先做类型校验,所以也就很难排查XML文件中的错误配置。

正当Spring开发者饱受Spring平台XML配置及依赖管理的复杂性之苦时,Spring 团队敏锐地意识到了这个问题。随着Spring 3.0的发布,Spring I0团队逐渐开始摆脱XML配置文件,并且在开发过程中大量使用“约定大于配置”的思想(大部分情况下就是Java Config的方式)来摆脱Spring框架中各类纷繁复杂的配置。

在Spring 4.0发布之后,Spring 团队抽象出了Spring Boot开发框架。Spring Boot本身并不提供Spring框架的核心特性及扩展功能,只是用于快速、敏捷地开发新一代基于Spring框架的应用程序。也就是说,Spring Boot并不是用来替代Spring的解决方案,而是和Spring框架紧密结合,用于提升Spring开发者体验的工具。同时,Spring Boot集成了大量常用的第三方库的配置,SpringBoot应用为这些第三方库提供了几乎可以零配置的开箱即用的能力。这样大部分的Spring Boot应用都只需要非常少量的配置代码,使开发者能够更加专注于业务逻辑,而无须进行诸如框架的整合等这些只有高级开发者或架构师才能胜任的工作。

从最根本上讲,Spring Boot就是一些依赖库的集合,它能够被任意项目的构建系统所使用。在追求开发体验的提升方面,Spring Boot,甚至可以说整个Spring 生态系统都使用到了Groovy 编程语言。Spring Boot所提供的众多便捷功能,都是借助于Groovy强大的MetaObject协议、可插拔的AST转换过程及内置了解决方案引擎所实现的依赖。在其核心的编译模型之中,Spring Boot使用Groovy来构建工程文件,所以它可以使用通用的导入和样板方法(如类的main方法)对类所生成的字节码进行装饰( Decorate)。这样使用Spring Boot编写的应用就能保持非常简洁,却依然可以提供众多的功能。

Spring Boot的目标

简化Java企业级应用是Spring Boot的目标宗旨。Spring Boot简化了基于Spring 的应用开发,通过少量的代码就能创建一-个独立的 、产品级别的Spring应用。Spring Boot为Spring平台及第三方库提供开箱即用的设置,这样就可以有条不紊地来进行应用的开发。多数Spring Boot应用只需要很少的Spring配置。

可以使用Spring Boot创建Java应用,并使用java -jar启动它或者也可以采用传统的WAR部署方式。同时Spring Boot也提供了一个运行“Spring 脚本”的命令行工具。

Spring Boot主要的目标如下。

为所有Spring开发提供一一个更快更广 泛的入门体验。

开箱即用,不合适时也可以快速抛弃。

●提供一系列大型项目常用的非功能性特征,如嵌入式服务器、安全性、度量、运行状况检查、外部化配置等。

●零配置。无冗余代码生成和XML强制配置,遵循“约定大于配置”。

Spring Boot内嵌如表2-1所示的容器以支持开箱即用。

你也可以将Spring Boot应用部署到任何兼容Servlet 3.0+的容器。需要注意的是,Spring Boot2要求不低于Java 8版本。

简而言之,Spring Boot抛弃了传统Java EE项目繁琐的配置和学习过程,让开发过程变得soeasy!

Spring Boot与其他Spring应用的关系

正如上文所介绍的,Spring Boot本质上仍然是一个 Spring应用,本身并不提供Spring框架的核心特性及扩展功能。

Spring Boot并不是要成为Spring平台里面众多“ 基础层( Foundation)”项目的替代者。

Spring Boot的目标不在于为已解决的问题域提供新的解决方案,而是为平台带来另- -种开箱即用的开发体验。这种体验从根本上来讲就是简化对Spring已有的技术的使用。对于已经熟悉Spring生态系统的开发人员来说,Spring Boot是一个很理想的选择,而对于采用Spring技术的新人来说,Spring Boot提供一种 更简洁的方式来使用这些技术。图2-1展示了Spring Boot与其他框架的关系。

1. Spring Boot与Spring框架的关系

Spring框架通过IoC机制来管理Bean。SpringBoot依赖Spring框架来管理对象的依赖。

Spring Boot并不是Spring的精简版本,而是为使用Spring做好各种产品级准备。

Spring Boot本质上仍然是-一个Spring 应用,只是将各种依赖按照不同的业务需求来进行“组装”,成为不同的Starter,如springboostater-web提供了快速开发Web应用的框架的集成,spring-boot-starter data-redis提供了对Redis 的访问。这样,开发者无须自行配置不同的类库之间的关系,采用Spring Boot的Starter 即可。

2. Spring Boot与Spring MVC框架的关系

Spring MVC实现了Web项目中的MVC模式。如果Spring Boot是-一个Web项目的话,可以选择采用Spring MVC来实现MVC模式。当然也可以选择其他类似的框架来实现。

3. Spring Boot与Spring Cloud框架的关系

SpringCloud框架可以实现一整套分布式系统的解决方案(当然其中也包括微服务架构的方案),包括服务注册、服务发现、监控等,而Spring Boot只是作为开发单一服务的框架的基础。

Starter

正如Starter所命名的那样,Starter 就是用于快速启动Spring应用的“启动器”,其本质是将某些业务功能相关的技术框架进行集成,统一到一组方便的依赖关系描述符中,这样,开发者就无须关注应用程序依赖配置的细节,大大简化了开启Spring应用的时间。Starter 可以说是SpringBoot团队为开发人员提供的技术方案的最佳组合,例如,如果要开始使用Spring 和JPA进行数据库访问,那么只需在项目中包含spring boot-starter data-jpa依赖即可,这对用户来说是极其友好的。

所有Spring Boot官方提供的Starter都以spring-boot starter-*方式来命名,其中*是特定业务功能类型的应用程序。这样,用户就能通过这个命名结构来方便查找自己所需的Starter。

Spring Boot官方提供的Starter主要分为三类:应用型的Starter、产品级别的Starter、技术型的Starter。

1.应用型的Starter

常用的应用型的Starter包含以下一些种类。

spring-boot- starter:核心Starter包含支持auto-configuration、日志和YAML。

spring-boot-starter-activemq:使用Apache ActiveMQ来实现JMS的消息通信。

spring-boo-starter-amqp:使用Spring AMQP和Rabbit MQ。

spring-boot- starter-aop:使用Spring AOP和AspectJ来实现AOP功能。

spring- boot- starter artemis:使用Apache Artemis来实现JMS的消息通信。

spring- boot-starter-batch:使用Spring Batch。

spring-boot- starter-cache:启用Spring框架的缓存功能。

spring- boot- starter- cloud- connectors:用于简化连接到云平台,如Cloud Foundry和Heroku。

spring-boot-starter-data-cassandra:使用Cassandra和Spring Data Cassandrao

spring-boot-starter-data-cassandra-reactive:使用Cassandra和Spring Data Cassandra Reactive。

spring-boot-starter data-couchbase:使用Couchbase和Spring Data Couchbase。

spring-boot- starter-data-elasticsearch:使用Elasticsearch和Spring Data Elasticsearch。

spring-boot-starter-data-jpa:使用基于Hibernate的Spring Data JPA。

spring-boot-starter-data-ldap:使用Spring Data LDAP。

spring- bot-starter- data-mongodb:使用MongoDB和Spring Data MongoDB。

spring-boot-starter-data-mongodb-reactive:使用MongoDB和Spring Data MongoDB Reactive。

spring-boot-starter-data-neo4j: 使用Neo4j和Spring Data Neo4j。

spring- botstarter data-redis:使用Redis和Spring Data Redis,以及Jedis 客户端。

spring-boot- starter- data-redis-reactive:使用Redis和Spring Data Redis Reactive,以及Lettuce 客户端。

spring- bot-tarter-data-rest:通过Spring Data REST来呈现Spring Data仓库。

spring-boot-starter- data-solr:通过Spring Data Solr来使用Apache Solr。

spring-boot-starter- freemarker:在MVC应用中使用FreeMarker视图。

spring-boot-starter- groovy-templates:在MVC应用中使用Groovy Templates视图。

spring- boot-starter-hateoas:使用Spring MVC和Spring HATEOAS来构建基于Hypermedia 的RESTful服务应用。

spring-boot-starter- integration:用于Spring Integration。

spring-boot- starterjdbc:使用Tomcat JDBC连接池来使用JDBC。

spring-boot-starter-jersey:使用JAX-RS和Jersey来构建RESTful服务应用,可以替代spring-

boot-starter-web。

spring- bo-tataerjooq:使用j00Q来访问数据库,可以替代spring boostarterdata-jpa或

spring-boot-starter-jdbc。

spring- boot- starter-jta-atomikos:使用Atomikos处理JTA事务。

sprigostater-tabitronix:使用Bitronix处理JTA事务。

spring-boot- strterjta-narayana:使用Narayana 处理JTA事务。

spring-boot-starter-mail:使用Java Mail和Spring框架的邮件发送支持。

spring-boot-starter-mobil:使用Spring Mobile来构建Web应用。

spring-boot-starter- mustache:使用Mustache视图来构建Web应用。

spring- boot-starter-quartz:使用Quartz。

springboo-starter-security:使用Spring Security。

spring-boot- starter- social- facebook:使用Spring Social Facebook。

spring- boot- starter- social-linkedin:使用Spring Social LinkedIn。

spring- boot- starter- socialtvitter:使用Spring Social Twitter。

spring-boot-starter-test:使用JUnit、Hamcrest 和Mockito来进行应用的测试。

spring-boot-starter-thymeleaf:在MVC应用中使用Thymeleaf视图。

spring-boot-starter- validation:启用基于Hibernate Validator的Java Bean Validation功能。

sprigos-tarter-web:使用Spring MVC来构建RESTful Web应用,并使用Tomcat作为默认内嵌容器。

spring-boot- starter-web-services:使用Spring Web Services。

springboot-starter-webfux:使用Spring框架的Reactive Web支持来构建WebFlux应用。,

●spring-boot-starter-websocket: 使用Spring框架的WebSocket支持来构建WebSocket应用。

2.产品级别的Starter

产品级别的Starter的主要有Actuator。

spring-boot-starter-actuator:使用Spring Boot Actuator来提供产品级别的功能,以便帮助开发人

员实现应用的监控和管理。

3.技术型的Starter

Spring Boot还包括- - 些技术型的Starter, 如果要排除或替换特定的技术,可以使用它们。

spring- bo-starter-jetty:使用Jetty作为内嵌容器,可以替换spring-boot-starter-tomcat。

spring- boot- starter-json:用于处理JSON。

spring-boot-starter-log4j2:使用Log4j2来记录日志,可以替换spring- boot- starter-logging。

spring-boot-starter-logging:默认采用Logback来记录日志。

spring-boot- sarer-reaco-etty:使用Reactor Netty来作为内嵌的响应式的HTTP服务器。

spring-boot-starter- tomcat:默认使用Tomcat作为默认内嵌容器。

springbo-starter-undertow:使用Undertow作为内嵌容器,可以替换spring boot-starter tormcat。

Spring Boot 2新特性

目前,Spring Boot团队已经紧锣密鼓地开发Spring Boot2版本,截至目前,Spring Boot最新版本为2.0.0 M4,本书的所有示例源码都是基于最新的Spring Boot 2版本来编写的。

SpringBoot2相比于SpringBoot1增加了如下新特性。

●对Gradle插件进行了重写。

基于Java 8和Spring Framework 5。

●支持响应式的编程方式。

对Spring Data、Spring Security、Spring Integration、Spring AMQP、Spring Session、SpringBatch等都做了更新。

1. Gradle插件

Spring Boot的Gradle 插件用于支持在Gradle中方便构建Spring Boot应用。它允许开发人员将应用打包成为可执行的jar或war文件,运行Spring Boot应用程序,以及管理Spring Boot应用中的依赖关系。Spring Boot 2需要Gradle的版本不低于3.4。

那么如何来安装Gradle插件呢?

安装Gradle插件需要添加以下内容。

独立地添加应用插件对项目的改动几乎很少。同时,插件会检测何时应用某些其他插件,并会相应地进行响应。例如,当应用Java插件时,将自动配置用于构建可执行jar的任务。

apply plugin: 'java'

apply plugin: ' io. spring. dependency-management '

使用Gradle插件来运行Spring Boot应用,只需简单地执行:

$./gradlew bootRun

2.基于最新的Java 8和Spring Framework 5

Spring Boot 2基于最新的Java和Spring Framework5,这意味着Spring Boot 2拥有构建现代应用的能力。

最新发布的Java 8中的Streams API、Lambda 表达式等,都极大地改善了开发体验,让编写并发程序更加容易。

核心的Spring Framework 5.0已经利用Java 8所引入的新特性进行了修订。这些内容包括以下几点。

●基于Java 8的反射增强,Spring Framework 5.0中的方法参数可以更加高效地进行访问。

●核心的 Spring接口提供基于Java 8的默认方法构建的选择性声明。

●支持候选组件索引作为类路径扫描的替代方案。

● 最为重要的是,此次Spring Framework 5.0推出了新的响应式堆栈Web框架。这个堆栈是完全的响应式且非阻塞,适合于事件循环风格的处理,可以进行少量线程的扩展。

总之,最新的Spring Boot 2让开发企业级应用更加简单,可以更加方便地构建响应式编程模型。

3. Spring Boot周边技术栈的更新

相应地,Spring Boot 2会集成最新的技术栈,包括Spring Data、Spring Security、Spring Inte-

gration、Spring AMQP、Spring Session、Spring Batch等都做了更新,其他的第三方依赖也会尝试使用最新的版本,如本书中所使用的Spring Data Redis 等。

使用Spring Boot 2让开发人员有机会接触最新的技术框架。

本篇只是给大家简单的介绍了一下springboot,喜欢的朋友可以转发关注一波!!

下篇文章给大家开启第一个springboot项目,大家用心关注一下!!!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200924A0I31300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券