SpringBoot基础(一)

1.SpringBoot简介

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

1.1pom文件
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath>../../spring-boot-dependencies</relativePath>
</parent>

是所有依赖的父项目,来真正管理SpringBoot里面的所有依赖版本(SpringBoot的仲裁中心)

1.2导入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

spring-boot-starter是SpringBoot的场景启动器,帮我们导入了web模块正常运行所依赖的组件,SpringBoot将所有的功能抽取出来做成一个个的starts(启动器),只需在项目引入这些starter相关场景的依赖都会导进来,要用什么功能就导入什么场景的启动器

主配置类

@SpringBootApplication           //来标注一个主程序类,说明是一个SpringBoot应用
    class HelloWorldApplication {
    public static void main(String[] args) {
    //Spring应用启动起来
    SpringApplication.run(HelloWorldApplication.class,args);
    }
}

@SpringBootApplication:标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就运行这个类的main方法q启动SpringBoot应用
点击进入@SpringBootApplication

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration      //SpringBoot的配置类,标注在某个类上,表示这是一个SpringBoot的配置类
@EnableAutoConfiguration      //开启自动配置功能,告诉我们SpringBoot开启自动配置功能,这样自动配置才能起作用
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {

@SpringBootConfiguration:这个注解标注在那个类上,说明此类是一个SpringBoot的配置类
@Configuration:配置类上来标注这个注解;配置类—–配置文件;配置类也是容器中的一个组件;@Component

点击进入@EnableAutoConfiguration

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {

@AutoConfigurationPackage:自动配置包;@Import({Registrar.class});Spring的底层注解,给容器中导入一个组件;导入的组件由Registrar.class将主配置类(@SpringBootApplication标注的类)的所在包及下面的所有子包里面的所有组件扫描到spring容器中
@Import({EnableAutoConfigurationImportSelector.class});给容器中导入组件;EnableAutoConfigurationImportSelector;导入哪些组件的选择器,将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景所需要的所有组件,并配置好这些组件==有了自动配置类,免去了我们手动编写配置注入功能组件等的工作==

1.3配置文件SpringBoot使用一个全局的配置文件,配置文件名是固定的:

application.properties
application.yml

配置文件的作用:修改SpringBoot自动配置的默认值

1.3.1YAML(YAML Ain’t Markup Language)

(1)基本语法:
k:(空格)v:表示一对键值对(空格必须有);以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的(属性和值也是大小写敏感的)
(2)值的写法:
字面量:普通的值(数字,字符串,布尔)k: v: 字面直接来写;
字符串默认不用加上单引号’’和双引号“”
“”双引号:不会转义字符串里面的特殊字符串;特殊字符串会作为本身想表示的意思name: “zhangsan \n list”:输出:

    zhangsan 
    list

‘单引号:会转义特殊字符,特殊字符最终只是一个普通的字符串数据name: ‘zhangsan \n list’:输出:

    zhangsan \n list

对象(属性和值)(键值对);
对象、map(属性和值)(键值对):
k: v: 在下一行来写对象的属性和值的关系;注意缩进
对象还是K: v的方式

    friends:
            lastname: zhangsan
            age: 20

行内写法:

    friends: {lastname: zhangsan,age: 18}  

注意冒号后面有空格
数组(List,Set)用值表示数组中的一个元素

    pets:
         - cat      (杆+空格+值)
         - dog
         - pig

杆+空格+值
行内写法:

    pets: {cat,dog,pig}

YAML配置实例:

server:
    port: 8080

properties配置实例:

   server.port=8080;

XML配置实例:

    <server>
             <port>8080</port>
    </server>
1.3.2配置文件值的注入
    person:
      firstName: zhang
      age: 18
      boss: false
      birth: 2019/11/23
      maps: {k1: 15,k2: 12,k3: v3}
      lists:
        - lisi
        - zhaoliu
      dog:
        name: 小狗
        age: 2
1.4JavaBean
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String firstName;
    private int age;
    private boolean boss;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

将配置文件中配置的每一个值映射到这个组件中
@ConfigurationProperties:告诉SpringBoot经本类中的所有的属性和配置文件中相关的配置进行绑定
prefix = “person”:配置文件中那个下面的所有属性进行一一映射
只有这个组件是容器中的组件,才能让容器提供的@ConfigurationProperties功能

我们可以导入配置文件处理器,编写就有提示了

<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>

@Value获取值和@ConfigurationProperties获取值比较

ZXL @ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEl 不支持 支持
JSR303数据校验 支持(@Validated) 不支持
复杂类型封装 支持 不支持

Author: Lelege
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Lelege !
评论
  TOC