springboot学习笔记(一)——基础知识
maven依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
启动类
- @SpringBootApplication包括
- Spring的@Configuration:标明该类使用Spring基于Java的配置。
- Spring的@ComponentScan:启用组件扫描,Web控制器类和其他组件才能被
自动发现并注册为Spring应用程序上下文里的Bean。 - Spring Boot 的 @EnableAutoConfiguration :就是这一行配置开启了Spring Boot自动配置的魔力,让你不用再写成的配置了
- run 方法
通过调用run,将业务委托给了Spring Boot的SpringApplication类。SpringApplication将引导我们的应用,启动Spring,相应地启动被自动配置的Tomcat web服务器。我们需要将 helloMain.class 作为参数传递给run方法来告诉SpringApplication谁是主要的Spring组件。为了暴露任何的命令行参数,args数组也会被传递过去。
package com.antRain;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//标识持久层mapper接口,用来找到mapper对象
@MapperScan("com.antRain.Dao")
@SpringBootApplication
public class helloMain {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(helloMain.class);
application.setBannerMode(Banner.Mode.OFF);
application.run(args);
}
}
-
SpringBoot相关注解
- @EnableAutoConfiguration自动载入应用程序所需的所有Bean。该注解组合了@Import注解.
- @Import注解导入了EnableAutoCofigurationImportSelector类,它使用SpringFactoriesLoader.loaderFactoryNames方法来扫描具有META-INF/spring.factories文件的jar包。而spring.factories里声明了有哪些自动配置
- @SpingBootApplication是 SpringBoot的核心注解,主要目的是开启自动配置。它也是一个组合注解,主要组合了@Configurer,@EnableAutoConfiguration(核心)和@ComponentScan。可以通过@SpringBootApplication(exclude={想要关闭的自动配置的类名.class})来关闭特定的自动配置
- @ImportResource加载xml配置的
- @AutoConfigureAfter在指定的自动配置类之后再配置
- @AutoConfigureBefore自动配置类需要在另外指定的自动配置类配置之前
-
Spring Boot 配置文件加载优先级如下:
Devtools全局设置属性在路径 (~/.spring-boot-devtools.properties 当devtools激活的时候).
测试用例上的 @TestPropertySource .
测试用例上的 @SpringBootTest#properties注解.
命令行参数.
配置在SPRING_APPLICATION_JSON 的属性(环境变量或系统属性中内嵌的内联JSON).
ServletConfig初始化参数.
ServletContext 初始化参数.
配置在 java:comp/env的 JNDI(Java Naming and Directory Interface) 属性.
Java系统属性 (System.getProperties()).
操作系统OS(Operating System)环境变量.
RandomValuePropertySource 中的属性只包括在包random.*.
没有打进jar包的Profile-specific 应用属性 (application-{profile}.properties 和 YAML ).
打进jar包中的Profile-specific 应用属性 (application-{profile}.properties 和 YAML).
没有打进jar包的应用配置 (application.properties 和 YAML).
打进jar包中的应用配置(application.properties 和 YAML).
@Configuration类上的@PropertySource注解 .
默认属性 (配置在文件 SpringApplication.setDefaultProperties).
- 配置文件位置读取优先级
- application.properties 或者 application.yml 读取优先级如下:
- file:./config/当前位置的子目录/config 下
- file:./当前位置
- classpath:/config/classpath /config 的包中
- classpath:/classpath的根目录
yml
- 以数据为中心,比json、xml等更适合做配置文件;
server:
port: 8081
path: /hello
1、基本语法
- k:(空格)v:表示一对键值对(空格必须有);
- 以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
- 属性和值也是大小写敏感;
2、值的写法
- 字面量:普通的值(数字,字符串,布尔)
k: v:字面直接来写;
字符串默认不用加上单引号或者双引号;
“”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
- 对象、Map(属性和值)(键值对):
k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式
行内写法:
friends: {lastName: zhangsan,age: 18}
- 数组(List、Set):
用- 值表示数组中的一个元素
users:
- 张三
- 李四
行内写法
users: [张三,李四]
controller
- application.yml
user:
id: 1
name: lisi
pawd: 123456
- Java类
package com.antRain.controller;
import com.antRain.service.UserService;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@Controller
@ComponentScan({"com.antRain.service"})
public class hello {
//读取配置文件里面的内容
@Value("${user.id}")
private Integer id;
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "hello 用户"+id;
}
@Autowired
private UserService userService;
@RequestMapping("getUser/{id}")
public String GetUser(@PathVariable int id){
return userService.getUser(id).toString();
}
}
/*
* SpringMVC部分
@RequestMapping 用于映射Web请求,包括访问路径和参数
ResponseBody 支持将返回值放在response内,而不是一个页面
@PathVariable 用于接收路径参数
@RestController 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody
@ControllerAdvice 通过该注解,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上,
@ExceptionHandler 用于全局处理控制器里的异常
@InitBinder 用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。
@ModelAttribute 本来的作用是绑定键值对到Model里,在@ControllerAdvice中是让全局的@RequestMapping都能获得在此处设置的键值对。
*
*
* */
-
类的相关注解
- @Controller控制层: 用于标记在一个类上,使用它标记的类就是一个SpringMvc Controller对象,分发处理器会扫描使用该注解的类的方法。并检测该方法是否使用了@RequestMapping注解。
- @RestController: 告诉Spring以字符串的形式渲染结果,并直接返回给调用者其实就是@Controller和@ResponseBody注解加在一起返回json数据
-
方法的相关注解
- @responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML, 一般在异步获取数据时使用;
- @RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径; 用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法
-
Spring注解
- @Service用于标注业务层组件
- @Controller用于标注控制层组件(如struts中的action)
- @Repository用于标注数据访问组件,即DAO组件
- @Component泛指组件,可以注解其他类注解,当组件不好归类的时候,我们可以使用这个注解进行标注
- @Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
- @ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中
- @Conditional注解可以根据代码中设置的条件装载不同的bean,在设置条件注解之前,先要把装载的bean类去实现Condition接口,然后对该实现接口的类设置是否装载的条件。
- @Import通过导入的方式实现把实例加入springIOC容器中。可以在需要时将没有被Spring容器管理的类导入至Spring容器中。
- @ImportResource导入配置文件。
-
SpringMvc 注解
- @RequestMapping 用于映射Web请求,包括访问路径和参数
- @ResponseBody 支持将返回值放在response内,而不是一个页面,默认类中的方法都会以 json 的格式返回
- @PathVariable 用于接收路径参数
- @RestController 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都默认加上了@ResponseBody
- @ControllerAdvice 通过该注解,我们可以将对于控制器的全局配置放置在同一个位置,注解了@Controller的类的方法可使用@ExceptionHandler、@InitBinder、@ModelAttribute注解到方法上,
- @ExceptionHandler 用于全局处理控制器里的异常
- @InitBinder 用来设置WebDataBinder,WebDataBinder用来自动绑定前台请求参数到Model中。
- @ModelAttribute 本来的作用是绑定键值对到Model里,在@ControllerAdvice中是让全局的 @RequestMapping都能获得在此处设置的键值对。
restful接口
- GET:一般用于查询数据,不办函数据的更新以及插入操作。由于明文传输的关系,我们一般用来获取一些无关用户的信息。
- POST:一般用于数据的插入操作,也是使用最多的传输方式,但是在H5调用时会有跨域的问题,一般使用JSONP来解决。
- PUT:我们使用PUT方式来对数据进行更新操作。
- DELETE:用于数据删除,注意在数据库内是逻辑删除(改变数据状态,用户不再查询得到,但还保留在数据库内)还是物理删除(真删了)。
@Value获取值和@ConfigurationProperties获取值比较
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
- application.yml
car:
color: white
length: 4499
name:
- porsche
- Bill
buy: 2019/12/25
parts: {"峰值扭矩": "260Nm", "加速度": 50}
- Car.java
package com.antRain.bean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Component
@ConfigurationProperties(prefix = "car")
public class Car {
private List<String> name; //车的名称
@Value("${car.color}")
private String color ;//颜色
@Value("#{2*2100}")
private Integer length;//长度mm
private Date buy;//购买日期
private Map<String,Object> parameter;//参数信息
}