一.Spring Boot简介
Spring Boot 的开发团队叫做Pivotal,Spring Boot 可以简化开发过程,抛弃配置八股文,他的目标就是为了提高开发效率。
spring boot核心特点:
第一个特点就是自动配置以及默认配置,这说的是什么意思呢?以我们一个web项目为例,其实它对外是要暴露端口的,那向这种配置,每一个web项目都要有,那我们SpringBoot就认为,既然每个web项目都要有,我就给你一个默认的配置,这样的话呢,你如果重新配置了的话,就以你的为标准,如果你不去配置的话,就以默认的为效。同样,向Redis和MySQL这些组件会有一系列的众多的一些默认的配置,其实这些默认的配置对与大多数的项目而言他们不一定会去改动。
第二个特点就是起步依赖:starter一站式 。这个起步依赖,在springboot 里面叫做starter,starter一站式服务就可以把你整个所需要用的依赖都引入进来。就比如说,假设我们想引入一个安全框架,那么,你只要引入一个starter,它就会把它所需要的相关的依赖都引进来,相当于对你来说,你不需要关注它需要哪些东西,你只需要关注你想引入它,那么引入一个依赖就够了。所以,这也大大减轻了程序员的开发负担.
第三个特点就是他会创建一个独立的Spring应用程序 。这个说的是什么意思呢,这个是说,我们之前我们需要用Tomcat作为一个容器,把我们的项目打成一个war包,然后把他放到tomcat里面去运行。现在呢,springboot内部就已经嵌入了tomcat,他就不需要额外的去做什么环境配置什么的,你只需要把它当成一个java程序运行,他就能启动起来。所以,在开发的时候,尤其是在部署运行的时候,也给我们带来了很多的便利。
第四个特点就是监控能力强,这个监控能力,如果你需要的话,就可以进行配置,配置好之后,对于内部的很多情况,你都能有所掌控。
最后一个特点就是较少需要XML配置,这种配置其实相对于我们的springboot配置文件而言啊,其实写起来还是比较繁琐的,有很多内容都是样板式的,不需要写。用springboot就可以比较少的去使用xml的配置。当然,少并不代表完全没有,在有些时候我们也是需要它的。
SpringBoot前世今生:
其实springboot诞生的基础和根基就是springframework ,springframework的核心就是IOC和APO。关于这块的内容,前面我的文章都有详细讲过。但是后来我么用这个核心内容去开发一些web项目,组件发现它存在一些繁琐的情况。所以,我们SpringBoot的核心目标就是精简高效,他是建立在我们spring的基础上去开发的,而不是另起炉灶,从零开始的。在后面,我还要学习和微服务相关的东西Spring Cloud,而且Spring Cloud 有一个特点就是集百家之长,他会把很多有用的一些项目和框架集合到一起来形成Spring Cloud。所以对于SpringBoot而言,他的基础是spring的核心,而它进一步的发展就是SpringCloud。
SpringBoot版本介绍:
我们打开SpringBoot的官网来看看,那里会把springboot当前的版本给说明出来,不仅如此,里面还有一些关于springboot的教学和演示。这里只要介绍一下他的版本,这里会有一些符号,比如CURRENT 、GA 、SNAPSHOT 。这些又是什么意思呢?我们究竟如何根据这些标记去选择适合我们的版本呢?当然,springboot的更新版本很快,当你再去打开这个官网的时候,可能他的版本又有了新的迭代,这是很正常的。不过,你们可能会有追新的思想,那是不是最新的就是最好的呢?这里要明确,不是最新最好,因为虽然springboot的版本提高了,但是他需要很多组件去配套的,而这些配套的组件是需要一个适配的过程的,并且组件的新功能我们并不一定会用到。
如果哪个版本是CURRENT版本,它代表是最新的GA版本,那什么是GA呢?GA的意思就是发布版本,他是面向大众的可用的稳定版本。这种版本的特点就是功能完整稳定,一旦发布之后,这个版本就永远不会更改。SNAPSHOT的英文意思是快照的意思,正是因为他叫SNAPSHOT,所以他的内容是会随时被修改的。
二.第一个Spring Boot 项目演示
(1) 新建SpringBoot项目
有两种springboot项目的方法:
第一种是通过spring官网的方式来创建springboot项目。
下面来学习第二种创建项目的方式:
Idea集成的Spring Initializr。打开Idea之后,新建项目,然后在左侧选择Spring Initializr,其他的就不用多解释了。next后选择版本和依赖,最后finish就行了。
生成好项目后,展开项目的结构。
(2) 完成第一个接口的开发
说到接口,我们快速复习一下web项目的三层结构。通常是分为Controller层,Service层和Dao层。Controller层主要的职责就是对外去提供接口而Service层主要的职责是业务逻辑相关的。而dao层通常是和数据库相关的。我们的项目也不例外,会分为这样的三层。
我们首先在com.haiexijun.springbootlearn下面创建一个包controller。然后去创建一个类。这个类的名称我叫它ParaController。然后要在类上加一个注解@RestController,@RestController的作用就是我们的返回是一个json格式的,而不是一个页面。然后编写如下代码:
package com.haiexijun.springbootlearn.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ParaController { @GetMapping("/first") public String firstRequest(){ return "hello springboot,我的第一个接口"; } }
我们点击运行项目。浏览器访问localhost:8080/first ,结果如下:
(3) 多种配置URL的方式
上面我们写的那个接口其实是写死的,他没有办法对参数进行一个接收和处理,这个和实际的情景也是不一样的。所以我要学习一下在springboot中,如果要对参数进行接收和处理的话要怎么做。
我们在上面的controller类中添加一个requestPara方法,把请求的参数给获取到,方法内用一个@RequestParam注解来表明传入的参数,并且可以对参数操作。
@GetMapping("para") public String requestPara(@RequestParam Integer num){ return "我收到了参数:"+ num; }
浏览器运行如下:
上面演示了GET请求接收请求传过来的参数,下面编写一个方法来演示接收POST请求传过来的参数。post请求接收参数,参数用@RequestBody注解标注,我们这里创建一个类类接受传过来的参数。我们新创建一个包entity,里面放实体类。我们在里面创建一个Student学生类,里面有id和name两个属性。
package com.haiexijun.springbootlearn.entity; public class Student { private Integer id; private String name; public Student(Integer id, String name) { this.id = id; this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + '}'; } }
@PostMapping("/post") public String postRequest(@RequestBody Student student){ return "我收到了post参数:"+ student; }
我们打开postman,来测试一下接口: