SpringBoot基础使用讲解文档

一、基础入门

1.1 初上手SpringBoot的感受

  • 更多注解,简化代码;
  • 所有的配置都集中在resources中,并且不用像MVC那样繁琐,极度简化配置;可以配置多环境配置文件,然后通过主配置文件的server.servlet.context-path来选择使用哪个配置文件;
  • 简化部署,maven直接提供spring-boot-maven-plugin插件,无需别的配置即可打包;

1.2 SpringBoot特点

1、依赖管理

(1)父项目做依赖管理及版本自动仲裁

spring-boot-starter-parent的父项目的父项目中几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制,其可以在pom.xml中的<properties>标签中增加<***.version>修改依赖版本。自动版本仲裁机制可以使引入依赖时不写版本号,只有当引入非版本仲裁的jar或改变版本号时,才要写版本号。

(2)导入starter场景启动器

spring-boot-starter是所有场景启动器最底层的依赖。SpringBoot所有支持的场景包括:Developing with Spring Boot

2、自动配置

(1)自动配置好了Tomcat、SpringMVC、Web常见功能(如字符编码等)

(2)指定默认包结构并支持调整

默认扫描规则:主程序MainApplication.java所在包及其下面的所有子包里面的组件都会被默认扫描进来。如果想要改变扫描路径,可以通过@SpringBootApplication(scanBasePackages="com.atguigu")或者@ComponentScan 指定扫描路径。即日常使用的@SpringBootApplication==等同于==@SpringBootConfiguration+@EnableAutoConfiguration+@ComponentScan("com.atguigu.boot")

(3)各种配置有默认值

注意:所有默认值都可以在application.properties中再修改且配置文件的值最终会绑定每个类上,这个类会在容器中创建对象

(4)按需加载所有自动配置项

注意:所有默认值都可以在application.properties中再修改且配置文件的值最终会绑定每个类上,这个类会在容器中创建对象

1.2.1 自动配置原理:

(1) SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration——>@Configuration(proxyBeanMethods =)表明该类为配置类

(2) 每个自动配置类按照条件进行生效,不是全部生效——>通过@Conditional设定生效条件

(3) 配置类会绑定配置文件指定的值——> 通过@EnableConfigurationProperties开启绑定功能并注入容器中,@ConfigurationProperties和配置文件的某一项进行绑定

(4) 配置类中@Bean注入组件的部分值从xxxxProperties里面拿,xxxProperties和配置文件进行了绑定

(5) 生效的配置类就会给容器中装配很多组件,只要容器中有这些组件,相当于这些功能就有了——>对配置类中的组件使用@ConditionalOnMissingBean如果用户没有配置好某些组件,SpringBoot会自动加载配置的默认组件,如果用户配置了优先用用户自己配置的

(6)(承接4) 组件定制化配置

○ 用户直接自己@Bean替换底层的组件(不常用)

○ 用户去看这个组件是获取的配置文件什么值就去修改(常用)——>组件当中可能会通过this.properties等绑定配置文件的值,修改配置文件即可修改组件

1.3 容器功能

1.3.1 类组件(bean)添加

在早期使用Spring时,添加bean都是在xml中使用bean标签添加类组件。而对于现在的SpringBoot,可以使用一些注解完成既定功能。首先是Spring中就存在的注解:

Bean注入:

  • @Component(代表组件)
  • @Controller(代表控制器)
  • @Service(代表业务逻辑组件)
  • @Repository(代表数据库组件)

指定包扫描路径等规则的注解:

  • @ComponentScan("com."):

其他注解:

  • @Configuration:告知SpringBoot,这是一个配置类,其有多种模式:
    • Full模式:proxyBeanMethods = true时触发,表示外部调用方法每次都是去容器中找组件,对配置类组件进行获取,得到的是CGLIB代理对象,SpringBoot总会检查这个组件是否在容器中存在,如果有就会保证组件单实例;
    • Lite模式:proxyBeanMethods = false时触发,表示容器中不会保存代理对象,对配置类组件进行获取,得到的不是代理对象,调用Bean注册方法得到的对象就会新建,不是单实例;
    • 使用场景总结:如果只是单单注册组件,无需依赖,则一般均用Lite模式;只有当组件在别的场景会被依赖,则使用Full模式;
  • @Bean:给容器中添加组件,以方法名作为组件id(可以在@Bean后自定义组件名),返回类型为组件类型
    • 注意:如果@Bean标注的方法传入了对象参数,这个参数的值就会直接从容器中找
    • 特性:
      • (a)配置类中@Bean注册的组件默认是单实例的,不论在IOC容器中获取多少次,都是同一个组件;
      • (b)配置类本身也是组件,即实际注册的组件包括@Configuration注册的配置类以及@Bean注册的方法;
      • (c)无论外部对配置类中@Bean注册的方法调用多少次,获取的都是之前注册到容器中的单实例对象;
  • @Import:参数为一个Class数组,给容器中自动创建出该数组中类型的组件,默认组件的名字就是全类名
  • @Conditional:条件装配,满足Conditional指定的条件,则进行组件注入

1.3.2 原生配置文件引入

  • @ImportResource:将已经存在的xml配置进行导入

1.3.3 配置绑定:

1、@Component + @ConfigurationProperties

  • 作用:将properties配置文件中的自定义配置,绑定到容器中的实体类中,赋予其实际内容
  • 注意:如果要使用该组件需要将组件加到容器中,需要和@Component等注解组合使用

2、@EnableConfigurationProperties + @ConfigurationProperties

  • 用法:只EnableConfigurationProperties直接使用在配置类上,@ConfigurationProperties使用在Car.class上
  • @EnableConfigurationProperties(Car.class)
    • ①开启Car和配置文件的配置绑定功能,让配置文件的赋值赋予Car
    • ②把这个Car这个组件自动注册到容器中

3、@Value

  • 作用:作用于方法的变量上,使用@Value("${...}")与配置文件的值进行绑定

二、核心功能

2.1 配置文件:

配置文件的撰写主要包括两种,一种是properties,一种的yaml。从yaml开始使用之后,这种规范可以更好地表达配置,更为常用。最主要的撰写规则为:属性写法使用“:”,对象使用{}或错行一个个键值对,数组使用[]或者“-”。

2.2 Web开发

2.2.1 SpringMVC自动配置概览

SpringBoot已经对SpringMVC有自动化配置,大多数场景都无需自定义配置

2.2.2 简单功能分析

1、静态资源访问

(A) 静态资源目录

  • 可识别到的静态资源路径包括:/static (or /public or /resources or /META-INF/resources)
  • 原理过程:请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面
  • 修改方式:可通过spring.resources.static-locations=[classpath:/.../]修改默认的静态资源路径

(B) 增加静态资源访问前缀

  • 配置方式:spring.mvc.static-path-pattern: /.../**
  • 访问路径:当前项目/static-path-pattern/静态资源名

(C) 欢迎页

  • 方式一:静态资源路径下有index.html;方式二:能处理index请求的controller
  • 注意:方式一在配置静态资源的访问前缀后就不生效了

2.2.3 请求参数处理

1、Rest风格

(1)常用注解形式:@xxxMapping

  • 举例:@GetMapping("/a")===@RequestMapping(value="/a",method=RequestMethod.GET)

(2)解读:

  • 对增删改查操作使用GET、DELETE、PUT和POST而不是写4个映射路径

(3)使用前端的表单实现:

  • 过程:
    • (A)表单提交会带上_method=PUT;
    • (B)请求过来被HiddenHttpMethodFilter拦截;
    • (C)此时会判断是否请求正常,且为POST请求;
    • (D)如果正常,则获取到_method的值,兼容PUT.DELETE.PATCH请求
  • 原理:
    • new HttpMethodRequestWrapper(request, method):将原生request(POST)和method都传入Wrapper中。通过查看源码,此处的requestWrapper还是继承了原生的ServletRequest,并没有修改request,只是采用了包装模式,重写了getMethod()方法,将method的值加入,并返回传入的值。最后过滤器链实际放行了wrapper的值,之后的方法调用getMethod()实际得到的是requestWrapper的已经修改后的值

2、请求映射原理:

SpringBoot将所有的请求映射都放在RequestMappingHandlerMapping中,通过查看源码,其一共有五种HandlerMapping,每次请求到来都从第一种开始挨个尝试,直到找到对应的映射

  • 请求进来,挨个尝试所有的HandlerMapping看是否有请求信息。
    • 如果有就找到这个请求对应的handler
    • 如果没有就是下一个 HandlerMapping

另:如果因为业务场景需要自定义映射处理,可以自己给容器中放HandlerMapping,自定义 HandlerMapping

3、常用注解、参数

(1)常用注解:

  • @RequestParam("xxx"):从请求参数中获取xxx名称的数据赋值给形参
  • @PathVariable("xxx"):获取对应路径变量的值
  • @RequestHeader("xxx"):获取请求头
    • 注意:如果不指定参数名,直接用Map<String,String>来获取,则是取得了所有的值
  • @CookieValue("xxx"):获取Cookie的值
  • @RequestBody:获取请求体的内容
  • @RequestAttribute("xxx"):获取请求域中的属性值
  • @MatrixVariable("xxx"):获取矩阵变量,即获取请求中形式为/user/{path;name=wy;age=18}这种以分号分隔的矩阵变量形式的请求数据

(2)Servlet API:

  • 种类:WebRequest、ServletRequest、MultipartRequest、 HttpSession、javax.servlet.http.PushBuilder、Principal、InputStream、Reader、HttpMethod、Locale、TimeZone、ZoneId
  • 用法:在控制器方法的形参使用,可以实现如往请求域中添加数据的功能

(3)复杂参数:

  • 种类:Map、Model(map、model里面的数据会被遍历并放在request的请求域,相当于调用了request.setAttribute)、Errors/BindingResult、RedirectAttributes(重定向携带数据)、ServletResponse(response)、SessionStatus、UriComponentsBuilder、ServletUriComponentsBuilder

(4)自定义类型:

  • 数据绑定:页面提交的请求数据(GET、POST)都可以无需set直接和对象属性进行绑定
    • 因为SpringMVC提供了参数解析器,每次for循环遍历全部的参数查找能处理该参数的解析器,解析完成后调用WebDataBinder数据绑定器,将请求参数的值绑定到指定的JavaBean中,在此期间还根据数据类型的不同将数据转换数据类型

2.2.4 数据响应和拦截器

1、数据响应

  • 常用注解:
    • @ResponseBody:SpringMVC注解,使对象作为返回值放于请求体内返回给前端,给类添加意味着给类中所有方法添加,@RestController=@ResponseBody+@Controller

2、拦截器:

  • @Configuration:定义配置类-拦截器
    • 可替换xml文件;定义一个拦截器,相当于之前的 mvc 里的配置

三、其余内容

3.1 Restful(风格) Web Service

1、说明

  • Restful(风格) Web Service是一种通信方式,位于接口层

2、作用

  • 其主要作用就是在系统与系统之间,以及在客户端与服务端之间进行信息传递

3、特点

  • 无状态:每个请求与之前的任何请求都无关,进行独立事务;
  • 独立性:间接代表系统进行了拆分,系统与系统间相互独立,然后使用Restful相互通信。

4、设计规范

  • GET方式:获取资源信息,获取资源内容,即查询操作,URL规范:/order/{id}
  • POST方式:用于保存、更新资源信息以及处理批量操作,URL规范:/order
  • PUT方式:update,更新资源,URL规范:/order/{id};
  • DELETE:URL规范:/order/{id}

5、注解:

  • @PathVariable:获取 url 中的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值