springboot学习笔记(一)——基础知识

springboot学习笔记(一)——基础知识

      • maven依赖
      • 启动类
      • yml
        • 1、基本语法
        • 2、值的写法
      • controller
      • restful接口
      • @Value获取值和@ConfigurationProperties获取值比较

maven依赖

  <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.1.1.RELEASEversion>
        <relativePath/> 
    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;//参数信息
}

你可能感兴趣的:(Spring+spring,boot)