SpringBoot简述

更多内容可以访问我的个人博客。

参考文章

构建微服务:Spring boot 入门篇

Spring Boot 2.x 系列教程

SpringMVC和Springboot的区别(网摘)

Spring-Spring、SpringMVC与SpringBoot三者的关系

Spring、SpringMVC、SpringBoot的区别

1. Spring

总的来说Spring是使用基本的JavaBean代替EJB,通过容器管理JavaBean的配置和声明周期,在此基础上实现了Spring的核心功能:AOP、IOC,其他web框架组件在AOP、IOC的基础上工作,将JavaBean交给Spring来管理。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

2. SpringMVC

Spring MVC就是一个类似于Strust2的一个MVC开发框架,是Spring开源项目的其中一个,Spring MVC需要有Spring的架包作为支撑才能跑起来。Spring MVC annotation式的开发比Struts2方便,可以直接代替SSH中的Struts(当然Struts的做为一个非常成熟的MVC,功能上感觉还是比Spring MVC强一点,不过Spring MVC已经足够用了)。SpringMVC的执行效率比Struts高,因为Struts的值栈影响效率。

Spring可以说是一个管理bean的容器,也可以说是包括很多开源项目的总称,Spring MVC是其中一个开源项目, SpringMVC的处理流程:接收到http请求后,由容器(如:tomact)解析http封装成一个request,通过映射关系(路径,方法,参数……),由Spring MVC的一个分发器在tomcat里的由Spring管理的bean的一个池子(bean容器)里面找到可以处理这个请求的bean,处理完了就返回响应。

3. Spring Boot

Spring Boot不是一门新技术。从本质上来说,Spring Boot就是Spring,它只是做了一些对Spring Bean的默认配置。

核心理念:开箱即用,快速启动

它使用“约定优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。使用Spring Boot很容易创建一个独立运行(运行jar,内嵌Servlet容器)、准生产级别的基于Spring框架的项目,使用Spring Boot你可以不用或者只需要很少的Spring配置。

约定优于配置(convention over configuration):

也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。本质是说,**开发人员仅需规定应用中不符约定的部分。**例如,如果模型中有个名为Sale的类,那么数据库中对应的表就会默认命名为sales。只有在偏离这一约定时,例如将该表命名为”products_sold”,才需写有关这个名字的配置。如果所用工具的约定与你的期待相符,便可省去配置;反之,你可以配置来达到你所期待的方式。


Spring Boot概述

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要编写样板化的配置。

Spring 家族发展到今天,已经很庞大了,作为一个开发者,如果想要使用 Spring 家族一系列的技术,需要一个一个地配置,还需要关心版本兼容性问题,繁琐且影响开发进度, Spring Boot 就是来解决这个问题,可以先不关心如何配置,快速地启动开发,进行业务逻辑编写,其他各种需要的技术,加入对应的 starter 就配置好了,直接使用。

Spring Boot 一些常用的基础框架组合起来,提供默认的配置,提供可插拔的设计(starter)来方便开发者使用这一系列的技术。

Spring Boot的优点

Spring Boot最重要的是以下四个核心:

① 自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置

② 起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。

③ 命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建。

④ Actuator:让你能够深入运行中的Spring Boot应用程序,一套究竟。

① 自动配置

在任何Spring应用程序的源代码里,你都会找到Java配置或XML配置(抑或两者皆有),它们为应用程序开启了特定的特性和功能。举个例子,如果你写过用JDBC访问关系型数据库的应用程序,那你一定在Spring应用程序上下文里配置过JdbcTemplate这个Bean。那段配置看起来会是这样的:

@Bean 
public JdbcTemplate jdbcTemplate(DataSource dataSource) { 
    return new JdbcTemplate(dataSource); 

}

这段非常简单的Bean声明创建了一个JdbcTemplate的实例,注入了一个DataSource依赖。当然,这意味着你还需要配置一个DataSource的Bean,这样才能满足依赖。假设你将配置一个嵌入式H2数据库作为DataSource Bean,完成这个配置场景的代码大概是这样的:

@Bean 
public DataSource dataSource() { 
     return new EmbeddedDatabaseBuilder() 
     .setType(EmbeddedDatabaseType.H2) 
     .addScripts('schema.sql', 'data.sql') 

     .build(); 
}

这个Bean配置方法创建了一个嵌入式数据库,并指定在该数据库上执行两段SQL脚本。build()方法返回了一个指向该数据库的引用。

这两个Bean配置方法都不复杂,也不是很长,但它们**只是典型Spring应用程序配置的一小部分。除此之外,还有无数Spring应用程序有着完全相同的方法。**所有需要用到嵌入式数据库和JdbcTemplate的应用程序都会用到那些方法。简而言之,这就是一个样板配置。既然它如此常见,那为什么还要你去写呢?

**Spring Boot会为这些常见配置场景进行自动配置。**如果Spring Boot在应用程序的Classpath里发现H2数据库的库,那么它就自动配置一个嵌入式H2数据库。如果在Classpath里发现JdbcTemplate,那么它还会为你配置一个JdbcTemplate的Bean。你无需操心那些Bean的配置,Spring Boot会做好准备,随时都能将其注入到你的Bean里。Spring Boot的自动配置远不止嵌入式数据库和JdbcTemplate,它有大把的办法帮你减轻配置负担,这些自动配置涉及Java持久化API(Java Persistence API,JPA)、Thymeleaf模板、安全和Spring MVC。

② 起步依赖

向项目中添加依赖是件富有挑战的事。你需要什么库?它的Group和Artifact是什么?你需要哪个版本?哪个版本不会和项目中的其他依赖发生冲突?Spring Boot通过起步依赖为项目的依赖管理提供帮助。起步依赖其实就是特殊的Maven依赖和Gradle依赖,利用了传递依赖解析,把常用库聚合在一起,组成了几个为特定功能而定制的依赖。

举个例子,假设你正在用Spring MVC构造一个REST API,并将JSON(JavaScript ObjectNotation)作为资源表述。此外,你还想运用遵循JSR-303规范的声明式校验,并使用嵌入式的Tomcat服务器来提供服务。要实现以上目标,你在Maven或Gradle里至少需要以下8个依赖:

 org.springframework:spring-core

 org.springframework:spring-web

 org.springframework:spring-webmvc

 com.fasterxml.jackson.core:jackson-databind

 org.hibernate:hibernate-validator

 org.apache.tomcat.embed:tomcat-embed-core

 org.apache.tomcat.embed:tomcat-embed-el

 org.apache.tomcat.embed:tomcat-embed-logging-juli

不过,如果打算利用Spring Boot的起步依赖,你只需添加Spring Boot的Web起步依赖(即不同的starter)

(org.springframework.boot:spring-boot-starter-web),仅此一个。它会根据依赖传递把其他所需依赖引入项目里,你都不用考虑它们。比起减少依赖数量,起步依赖还引入了一些微妙的变化。**向项目中添加了Web起步依赖,实际上指定了应用程序所需的一类功能。**因为应用是个Web应用程序,所以加入了Web起步依赖。与之类似,如果应用程序要用到JPA持久化,那么就可以加入jpa起步依赖。如果需要安全功能,那就加入security起步依赖。简而言之,你不再需要考虑支持某种功能要用什么库了,引入相关起步依赖就行。

此外,Spring Boot的起步依赖还把你从“需要这些库的哪些版本”这个问题里解放了出来。起步依赖引入的库的版本都是经过测试的,因此你可以完全放心,它们之间不会出现不兼容的情况。

③ 命令行界面

除了自动配置和起步依赖,Spring Boot还提供了一种很有意思的新方法,可以快速开发Spring应用程序。正如之前在1.1节里看到的那样,Spring Boot CLI让只写命令行代码即可实现应用程序成为可能。

Spring Boot CLI利用了起步依赖和自动配置,让你专注于代码本身。不仅如此,你是否注意到代码清单1-1里没有import?CLI如何知道RequestMapping和RestController来自哪个包呢?说到这个问题,那些类最终又是怎么跑到Classpath里的呢?

说得简单一点,CLI能检测到你使用了哪些类,它知道要向Classpath中添加哪些起步依赖才能让它运转起来。一旦那些依赖出现在Classpath中,一系列自动配置就会接踵而来,确保启用DispatcherServlet和Spring MVC,这样控制器就能响应HTTP请求了。

Spring Boot CLI是Spring Boot的非必要组成部分。虽然它为Spring带来了惊人的力量,大大简化了开发,但也引入了一套不太常规的开发模型。要是这种开发模型与你的口味相去甚远,那也没关系,抛开CLI,你还是可以利用Spring Boot提供的其他东西。

④ Actuator

Spring Boot的最后一块“拼图”是Actuator,其他几个部分旨在简化Spring开发,而**Actuator则要提供在运行时检视应用程序内部情况的能力。**安装了Actuator就能窥探应用程序的内部情况了,包括如下细节:

 Spring应用程序上下文里配置的Bean

 Spring Boot的自动配置做的决策

 应用程序取到的环境变量、系统属性、配置属性和命令行参数

 应用程序里线程的当前状态

 应用程序最近处理过的HTTP请求的追踪情况

 各种和内存用量、垃圾回收、Web请求以及数据源用量相关的指标

Actuator通过Web端点和shell界面向外界提供信息。如果要借助shell界面,你可以打开SSH(Secure Shell),登入运行中的应用程序,发送指令查看它的情况。

总结

Spring Boot没有引入任何形式的代码生成,而是利用了Spring 4的条件化配置特性,以及Maven和Gradle提供的传递依赖解析,以此实现Spring应用程序上下文里的自动配置。

简而言之,从本质上来说,Spring Boot就是Spring,它只是做了那些没有它你自己也会去做的SpringBean配置,有了Spring,你就不用再写这些样板配置了,可以专注于应用程序的逻辑。

所以,Spring Boot的项目其实只是普通的Spring项目,只是它们正好用到了Spring Boot的起步依赖和自动配置而已。因此,那些你早已熟悉的从头创建Spring项目的技术或工具,都能用于Spring Boot项目。

自动配置消除了传统Spring应用程序里的很多样板配置;Spring Boot起步依赖让你能通过库所提供的功能而非名称与版本号来指定构建依赖;Spring Boot CLI将Spring Boot的无阻碍开发模型提升到了一个崭新的高度,在命令行里就能简单快速地用Groovy进行开发;Actuator让你能深入运行中的应用程序,了解Spring Boot做了什么,是怎么做的。

你可能感兴趣的:(Java,Web,Web开发)