(三)、SpringBoot核心功能
CTRL+H
打开的是 继承树
CTRL+F12
打开的是 方法结构
1.配置文件
1.1、properties
同以前的properties用法
1.2、yaml
(1).yaml 简介
YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言
)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。
非常适合用来做以数据为中心的配置文件
(2).yaml 基本语法
- key: value;
kv之间有空格
大小写敏感
- 使用
缩进表示层级关系
缩进不允许使用tab
,只允许空格- 缩进的空格数不重要,只要相同层级的元素
左对齐
即可 - '#'表示
注释
字符串无需加引号
,如果要加,''与""表示字符串内容 会被 转义/不转义 (单引号会转义特殊字符、双引号不会转义特殊字符。比如 \n ,单引号输出的是\n,双引号会换行)。 这里的转义是: 会不会修改原本的功能,转义就是把原有的功能给转义掉。
(3).数据类型
- 字面量:单个的、不可再分的值。date、boolean、string、number、null
k: v
- 对象:键值对的集合。map、hash、set、object
⭐行内写法的时候k1与 : 与 v1 都要有间隔,否则会默认讲k1:v1当作键
行内写法: k: {k1 : v1,k2 : v2,k3 : v3} #或 k: k1: v1 k2: v2 k3: v3
- 数组:一组按次序排列的值。array、list、queue
行内写法: k: [v1,v2,v3] #或者 k: - v1 - v2 - v3
假如一个文件中存在 application.yaml和application.properties那么两者都会生效的。
(4).示列
1.宠物类
package com.jsxs.bean; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * @Author Jsxs * @Date 2023/7/2 9:06 * @PackageName:com.jsxs.bean * @ClassName: Pet * @Description: TODO * @Version 1.0 */ @Data @AllArgsConstructor @NoArgsConstructor public class Pet { private String name; private Double weight; }
2.Person类: 匹配绑定并放入IOC容器中
package com.jsxs.bean; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; /** * @Author Jsxs * @Date 2023/7/2 9:05 * @PackageName:com.jsxs.bean * @ClassName: Person * @Description: TODO * @Version 1.0 */ @Data @AllArgsConstructor @NoArgsConstructor @Component // 声明这是IOC容器中的一个组件 @ConfigurationProperties(prefix = "person") // 指定组件配置文件的前缀 public class Person { private String userName; private Boolean boss; private Date birth; private Integer age; private Pet pet; private String[] interests; private List<String> animal; private Map<String, Object> score; private Set<Double> salarys; private Map<String, List<Pet>> allPets; }
3.application.yaml 配置文件
这里在行内写 k:v 的时候,一定要用空格间隔分来。 k 是橙色
person: userName : jsxs boss : true birth : 2023/07/02 09:27:26 age : 18 pet : name : 哈吉米 weight : 18.5 interests : [swiming,basck] animal : [cat,dog] score : {math : 131,english : 140} salarys : [3999,4999.98,5999.99] allPets : jsxs : [{name : tom,weight : 15.3}]
4.测试
package com.jsxs.controller; import com.jsxs.bean.Person; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; /** * @Author Jsxs * @Date 2023/7/2 9:37 * @PackageName:com.jsxs.controller * @ClassName: IndexController * @Description: TODO * @Version 1.0 */ @Controller @ResponseBody public class IndexController { @Resource Person person; @GetMapping("/person") public Person index(){ return person; } }
1.3、配置提示
自定义的类和配置文件绑定一般没有提示。
加入下面的依赖和配置之后,我们配置自定义的类时会有提示。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build>
2.WEB 开发
DispathServlet 和 SpringMvc 1. 先获得 url 请求的路径 () 2. 获得 url 的那种解析器(5种) 3. 获得方法体参数的类型和个数 4. 遍历获得的参数 获得方法体参数的具体解析器 (27种) 5. 通过解析器开始解析方法体参数。 6. 再判断参数体中是否由注解,后面会给我们创建一个实列对象 7. 最后给我们创建的空实列对象进行赋值
1.SpringMVC自动配置概览
Spring Boot provides auto-configuration for Spring MVC that works well with most applications.(大多场景我们都无需自定义配置
)
The auto-configuration adds the following features on top of Spring’s defaults:
- Inclusion of ContentNegotiatingViewResolver and BeanNameViewResolver beans.
- 内容协商视图解析器和BeanName
视图解析器
- Support for serving static resources, including support for WebJars (covered later in this document)).
静态资源
(包括webjars)
- Automatic registration of Converter, GenericConverter, and Formatter beans.
自动注册
Converter,GenericConverterFormatter
- Support for HttpMessageConverters (covered later in this document).
- 支持
HttpMessageConverters
(后来我们配合内容协商理解原理)
- Automatic registration of MessageCodesResolver (covered later in this document).
- 自动注册 MessageCodesResolver (
国际化
用)
- Static index.html support.
- 静态i
ndex.html
页支持
- Custom Favicon support (covered later in this document).
自定义 Favicon
- Automatic use of a ConfigurableWebBindingInitializer bean (covered later in this document).
- 自动使用 ==ConfigurableWebBindingInitializer ==,(DataBinder负责将
请求数据绑定到JavaBean
上)
If you want to keep those Spring Boot MVC customizations and make more MVC customizations (interceptors, formatters, view controllers, and other features), you can add your own @Configuration class of type WebMvcConfigurer but without @EnableWebMvc.
不用
@EnableWebMvc
注解。使用@Configuration + WebMvcConfigurer
自定义规则If you want to provide custom instances of RequestMappingHandlerMapping, RequestMappingHandlerAdapter, or ExceptionHandlerExceptionResolver, and still keep the Spring Boot MVC customizations, you can declare a bean of type WebMvcRegistrations and use it to provide custom instances of those components.
声明
WebMvcRegistrations 改变默认底层组件
If you want to take complete control of Spring MVC, you can add your own @Configuration annotated with @EnableWebMvc, or alternatively add your own @Configuration-annotated DelegatingWebMvcConfiguration as described in the Javadoc of @EnableWebMvc.
使用
@EnableWebMvc+@Configuration+DelegatingWebMvcConfiguration 全面接管SpringMVC