简介
springboot的基础的知识点的学习总结
springboot
设计目的是为了简化spring应用的初始搭建和开发过程。
简单例子
new project,一般用这个阿里的地址:https://start.aliyun.com/
点击next,选择jdk版本
点击next,选择模块
点击next,填写项目名字
创建好了项目,还有自动给了简单例子,右键运行DemoApplication启动类。
扩展:这个启动类是放到demo包下的,它是会扫描它的上级目录demo下的所有包的,要想扫描到自己写的类,要把类放到启动类的上级目录demo下。
隐藏文件
项目中有这些用不到的文件,可以隐藏
添加不想看到的文件,如HELP.md;*.iml;.idea;点击应用,项目就干净多了
和spring对比
spring依赖设置繁琐,配置繁琐
springboot简化了依赖配置,简化了常用工程相关配置,内置了服务器
依赖坐标的版本管理
在pom.xml文件中
由spring-boot-dependencies统一管理依赖坐标的版本,可以避免多个依赖使用相同技术时出现依赖版本的冲突。
也可以继承spring-boot-starter-parent,里面其实还是spring-boot-dependencies
starter
pom.xml中的starter,就是包含了若干个依赖坐标,可以通过这个快速的进行依赖配置。目的是减少依赖配置。
扩展:和parent的区别,parent是所有springboot项目都需要继承的项目,定义了若干个坐标版本号,以达到减少依赖冲突的目的。
引导类
引导类就是application启动类。
SpringApplication.run(DemoApplication.class, args);
这行代码的运行是启动spring容器,扫描所在包的bean
内嵌Tomcat
原理是将Tomcat服务器作为对象运行,并将该对象交给spring容器管理。
在这个依赖中包含了Tomcat的依赖了。
如果不想使用Tomcat,可以在pom.xml中使用< exclusions>排除掉Tomcat依赖。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency>
rest风格
rest,表现形式状态转换,可以隐藏资源的访问行为,不能通过请求地址知道对资源的操作,简洁。他是通过行为动作(请求方式)区分对资源进行的操作的。
请求方式有:
- get:查询
- post:新增
- put:更新
- delete:删除
根据rest风格对资源进行访问称为restful。它是一种约定,不是规范,是可以打破的。
在controller中,可以使用@GetMapping,@PostMapping,@PutMapping,@DeleteMapping来接收请求。
方法中使用@PathVariable来接收请求中的参数,在url路径上要配合{参数名}。
如果有多个参数,就封装成对象,转成json对象,然后controller使用@RequestBody来接收json对象。
例子
package com.christ.demo.demos.web;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/users")
public class BasicController {@GetMapping("/{id}")
public void get(@PathVariable Integer id){System.out.println("select:"+id);
}
@PostMapping
public void add(@RequestBody User user){System.out.println("add" + user.getName());
}
}
postman发送get请求:http://localhost:8080/users/1
postman发送post请求:http://localhost:8080/users
json格式请求体
{"name":"christ","age":18
}
配置
springboot的基本配置在resource中的application.properties,application.yaml或application.yml中。
如果三个都存在,优先级:application.properties>application.yml>application.yaml
属性相同会覆盖,不同会补充。
yml
数据序列化格式
格式:值的前面有一个空格
users:- name: christage: 18- name: jackage: 20
users1:-name: mikeage: 19-name: jhonage: 21users2: [{name: jerry,age: 22},{name: luffy,age: 23}]
value: 111
hobbies: [sing,dance,basketball]
读配置文件的值
可以使用@value注解
package com.christ.demo.demos.web;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/users")
public class BasicController {@Value("${users[1].name}")private String name;@GetMapping("/getName")
public void readValue(){System.out.println(name);
}
}
可以把所有的属性都封装到一个Environment对象中,使用@Autowired自动装配
package com.christ.demo.demos.web;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/users")
public class BasicController {@Autowiredprivate Environment env;@GetMapping("/getValue")public void readValues(){System.out.println(env.getProperty("value"));
}
}
引用值
localValue: test
referenceValue: ${localValue}
测试类
如果测试类在springboot启动类的包或子包中,可以省略启动类的设置,否则,应该在@springbootTest注解上加上属性class指定启动类。
@SpringBootTest(classes = DemoApplication.class)
class DemoApplicationTests {@Testvoid contextLoads() {}
}
启动类的package
测试类的package,要在package com.christ.demo或这个的子包下
前后端数据协议
用于后端和前端进行数据格式的统一。
一般包含code,data,msg。
统一异常处理
使用@RestControllerAdvice和@ExceptionHandler(指定捕获的异常.class)。