写点什么

Spring Boot 基础学习

用户头像
偏执
关注
发布于: 15 小时前

一、入门

1、编写基本的 SpringBoot 项目

1、创建 maven 工程

2、导入依赖

3、编写主程序

/** * 表明这是一个SpringBoot的主程序类 */@SpringBootApplicationpublic class MainApplication {    public static void main(String[] args) {        // Spring应用启动起来        SpringApplication.run(MainApplication.class, args);    }}复制代码
复制代码

2、HelloWorld 探究

1、POM 文件

1、父项目
    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.9.RELEASE</version>    </parent>它的父项目是spring-boot-dependecies:来真正管理springboot应用的所有依赖版本有一个<propertes>定义了每一个依赖的版本复制代码
复制代码

SpringBoot 的版本仲裁中心

以后导入依赖默认是不需要写版本;dependecies 中没引入的需要声明版本号

2、场景启动器
spring-boot-stater-web复制代码
复制代码

spring-boot-stater:

SpringBoot 场景启动器,声明了一些依赖导入,导入 web 模板正常运行需要依赖的组件

SpringBoot 将所有的功能场景都抽取处理啊,做成一个个的 starters(启动器),只需要在项目里引入这些相关场景的依赖。版本由父 pom 自动控制,一个功能对应一个场景启动器

2、主程序类

@SpringBootApplicationpublic class MainApplication {    public static void main(String[] args) {        // Spring应用启动起来        SpringApplication.run(MainApplication.class, args);    }}复制代码
复制代码

@SpringBootApplication 标注的类是 SpringBoot 的主配置类,运行该类 main 方法来启动应用

@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(    excludeFilters = {@Filter(    type = FilterType.CUSTOM,    classes = {TypeExcludeFilter.class}), @Filter(    type = FilterType.CUSTOM,    classes = {AutoConfigurationExcludeFilter.class})})public @interface SpringBootApplication {复制代码
复制代码

1、 @SpringBootConfiguration:表示是 SpringBoot 的配置类,底层是 @Configuration 配置类=配置文件,配置类也是容器中的一个组件

2、 @EnableAutoConfiguration:开启自动配置功能。是一个组合注解

@AutoConfigurationPackage@Import({AutoConfigurationImportSelector.class})public @interface EnableAutoConfiguration {复制代码
复制代码

1、@AutoConfigurationPackage:自动配置包。

将主配置类的所在包及下面所有子包里面的所有组件扫描到 Spring 容器中

2、@Import({AutoConfigurationImportSelector.class}):给容器中导入一个组件;导入的组件由 AutoConfigurationImportSelector.class(导入组件的选择器)指定。

AutoConfigurationImportSelector.class 该类下的 String[] selectImports()方法,将所有需要导入的组件以全类名的方式返回,这些组件就会被添加到容器中。会给容器中导入非常多的自动配置类(xxxAutoConfiguration)

todo 截图自动配置类内容

AutoConfigurationImportSelector.getCandidateConfigurations()方法-> SpringFactoriesLoader.loadFactoryNames():从"META-INF/spring.factories"路径下,spring-boot-autoconfiguration包下的META-INF/spring.factories文件里面定义的org.springframework.boot.autoconfigure.EnableAutoConfiguration字段定义的配置类,导入到容器中,自动配置类就生效复制代码
复制代码

3、使用 Spring Initializer 快速创建项目

选中自己需要的模块,联网自动下载依赖

默认生成的内容:

  • 主程序已经生成好,无需手动编写 Application 类

  • resources 文件夹。

    static:保存所有静态资源:imags...

    templates:保存所有模板页面,默认 jar 包方式,嵌入式 Tomcat,默认不支持 jsp 页面,可以使用模板引擎(freemarker、thymeleaf)

    application.properties:Spring Boot 应用的配置文件。可修改一些默认设置,ex:server.port=XXX

二、配置文件

1、配置文件

SpringBoot 使用一个全局的配置文件

  • application.properties

  • application.yml

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

YAML(YAML Ain't Markup Language):以数据为中心的配置

  • a:是一个标记语言

  • isn't:不是一个标记语言

标记语言:

yml 配置案例

server:    port: 8090复制代码
复制代码

2、YAML 语法

1、基本语法

K: [空格]V 表示一个键值对

以空格缩进来控制层级关系,左对齐的一列数据是同一层级

属性和值也是大小写敏感

2、值的写法

字面量:普通的值(数字、字符串、布尔)

  • k: v:字面量直接写、字符串默认不用加引号

  • "":不转义字符串中特殊字符

  • '':会转义特殊字符

对象:属性+值,键值对

  • k: v:下一行写对象的属性和值

friends:    lastName:zhangsan age:20复制代码
复制代码
  • 行内写法

    friends: {lastName:zhangsan, age: 18} 复制代码

数组:

用-值表示数组中的一个元素

pets:    - cat - dog - pig pets: [cat,dog,pig]   复制代码
复制代码

3、获取配置文件值

1、将配置文件中配置的属性值映射到组件中@ConfigurationProperties(prefix = "xxx"):将本类中的所有属性和配置文件中值进行绑定

2、导入配置文件处理器

spring-boot-configuration-processor

单元测试

@SpringBootTest:使用 SpringBoot 的单元测试

@RunWith(SpringRunner.class) :驱动器

3、properties 配置文件

1、语法

2、获取配置文件值

1、@ConfigurationProperties(prefix = "xxx");编码问题:FileEncodings:设置转换成 ASCII

2、@Value:Spring 的底层注解,为字段赋值。@Value(${xxx.yyy}/表达式/字面量)

获取 map 的值:

JavaBean 和配置文件进行映射时->@ConfigurationProperties

单个字段获取配置值->@Value

三、Profile

用来支持多环境配置

1、多 Profile 文件

1、properties 文件

主配置文件编写时,文件名可为 application-{profile}.properties/yaml

2、yaml 文件

---:同一个文件中划分不同的 document

2、激活指定 profile

  • Spring-profiles.active = xxx:配置文件中指明激活指定 profile

  • 命令行:idea 运行时指定。--spring.profiles.active = dev。优先级更高

  • 将项目打成 jar 包(打完的包在 target 目录下),java -jar xxx.jar --spring.profiles.active = dev

  • 虚拟机参数。VM options:-Dspring-profiles.active=dev

四、日志

1、日志框架

JUL、JCL、JBoss-logging、logback、log4j、log4j2、slf4j....

左边选一个门面,右边选一个实现

日志门店:slf4j;实现:log4j2

SpringBoot 底层是 Spring 框架,Spring 默认是 JCL、SpringBoot 选用的是 slf4j 和 logback


用户头像

偏执

关注

还未添加个人签名 2021.07.23 加入

还未添加个人简介

评论

发布
暂无评论
Spring Boot基础学习