SpringBoot

一、SpringBoot概述

1、SpringBoot简介
Spring Boot 是用来简化 Spring 的搭建和开发过程的全新框架。Spring Boot 去除了大量的 xml 配置文件,简化了复杂的依赖管理,配合各种 starter 使用,基本上可以做到自动化配置。Spring 可以做的事情,现在用 Spring boot 都可以做。

2、优点:

  • 快速创建独立运行的Spring项目以及与主流框架集成
  • 使用嵌入式的Servlet容器,应用无需打成WAR包
  • starters自动依赖与版本控制
  • 大量的自动配置,简化开发,也可修改默认值
  • 可以完全使⽤代码的⽅式进⾏开发,⽽不需要 XML配置;
  • 运行时应用监控
  • 与云计算的天然集成

3、开发演进
Spring(配置繁重)>>>SpringBoot(简化开发)>>>SpringCloud(分布式开发)

二、SpringBoot项目创建及解析

1、SpringBoot创建
  • IDEA 创建(推荐)
  • 在线(⽹站)创建

参考博客:SpringBoot项目的创建

2、第一个SpringBoot程序

(1)Maven依赖:pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.0</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

 <!-- springboot单元测试 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

    <build>
        <plugins>
             <!-- 打包插件 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

(2)编写Controller:

@RestController
public class helloController {

    @RequestMapping("/hello")
    public String index(){
        return "helloWorld";
    }
}

(3)启动运行:
SpringBoot内嵌了Tomcat可以直接启动运行
在这里插入图片描述
(4)项目构成
在这里插入图片描述

  • static: 保存所有的静态文件js,css,images
  • templates: 保存所有的模板页面(SpringBoot使用嵌入式的Tomcat,默认不支持JSP页面),可以使用模板引擎(freemarker、thymeleaf)
  • application.properties(application.yml):SpringBoot应用的配置文件,可以修改自动配置的默认值。
3、组件解析及自动配置原理

(1)父依赖
主要依赖一个父项目,管理项目的资源过滤及插件。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.0</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

点进去,发现还有一个父依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.4.0.RELEASE</version>
  </parent>

这里是真正 管理SpringBoot应用里面所有依赖版本的地方,是SpringBoot的版本控制中心。以后我们导入依赖时默认是不需要指定版本;但是如果导入的包没有在依赖中管理着就需要手动配置版本了。

在这里插入图片描述
(2)启动器starter:
在这里插入图片描述
Spring Boot为我们提供了绝大多数场景的启动器(Starter),只要引入了相应场景的starter,相关应用场景的绝大部分配置将会自动配置,从而简化开发。

springboot-boot-starter-xxx:就是spring-boot的场景启动器

spring-boot-starter:SpringBoot的核心启动器,包括auto-configuration support, logging 和 YAML

spring-boot-starter-web导入了web模块正常运行所依赖的组件; 包括RESTful, 应用Spring MVC. 使用 Tomcat 作为默认的嵌入容器。

SpringBoot将所有的功能场景都抽取出来,做成一个个的starter (启动器),只需要在项目中引入这些starter即可,所有相关的依赖都会导入进来 , 我们要用什么功能就导入什么样的场景启动器即可 ;也可以自己自定义 starter。

常用场景启动器:https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#using-boot-starter

(3)主启动类:
在这里插入图片描述
@SpringBootApplication标注说明这个类是SpringBoot的主配置类 , 我们通过运行这个类的main方法来启动SpringBoot应用;

点击@SpringBootApplication后发现还有其他注解:

@SpringBootConfiguration
@EnableAutoConfiguration //核心注解
@ComponentScan

1)@ComponentScan
@ComponentScan对应XML配置中的元素。能自动扫描并加载符合条件的组件或者bean , 将这个bean定义加载到IOC容器中.

2)@SpringBootConfiguration
表示这是一个SpringBoot的配置类;我们继续进去这个注解查看:

@Configuration

@Configuration说明这是一个配置类 ,配置类就是对应Spring的xml 配置文件;继续点击:

@Component

@Component 说明,启动类本身也是Spring中的一个组件而已,负责启动应用。

3)@EnableAutoConfiguration
@EnableAutoConfiguration 开启自动配置功能,是SpringBoot的 核心注解 。以前我们需要自己做一些配置,现在SpringBoot可以自动帮我们配置 ;点进注解接续查看:

@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})

@AutoConfigurationPackage :自动配置包

  • 继续点击发现:@Import({Registrar.class}) @import 为Spring底层注解, 给容器中导入一个组件。

  • Registrar.class 作用:将主启动类的所在包及包下面所有子包里面的所有组件扫描到Spring容器

@Import({AutoConfigurationImportSelector.class}) :给容器导入自动配置类;

  • AutoConfigurationImportSelector:自动配置导入选择器,那么它会导入哪些组件的选择器呢?我们点击去这个类看源码:
    在这里插入图片描述
    在这里插入图片描述
    通过Debug设置断点,发现configurations中有很多自动配置类,这些配置类将会对我们需要场景的组件进行导入并配置。
    在这里插入图片描述
    这些配置类是从哪里加载过来的呢?
    调用getCandidateConfigurations方法,获取候选的配置文件:
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

META-INF/spring.factories:SpringBoot自动配置的核心文件
在这里插入图片描述
在这里插入图片描述

SpringBoot自动配置真正的实现是从classpath中搜寻所有的META-INF/spring.factories配置文件 ,并将其中对应的 org.springframework.boot.autoconfigure. 包下的配置项,通过反射实例化为标注了 @Configuration的JavaConfig形式的IOC容器配置类 , 然后将这些汇总为一个实例加载到IOC容器中。

  • SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入容器 , 自动配置类就生效 , 帮我们进行自动配置工作;
  • 整个J2EE的整体解决方案和自动配置都在springboot-autoconfigure的jar包中;
  • 它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration), 就是给容器中导入这个场景需要的所有组件 ,并配置好这些组件 ;
  • 有了自动配置类 , 免去了我们手动编写配置注入功能组件等的工作;

主启动类主要做了以下四件事情:

  • 推断应用的类型是普通的项目还是Web项目
  • 查找并加载所有可用初始化器 , 设置到initializers属性中
  • 找出所有的应用程序监听器,设置到listeners属性中
  • 推断并设置main方法的定义类,找到运行的主类

(4)自动配置类解析

  • xxxAutoConfiguration:自动配置类
  • xxxProperties:属性配置类
  • yml/properties文件中能配置的值都来源于属性配置类xxxProperties.

CTRL+N:搜索HttpEncodingAutoConfiguration,我们以这个配置类来举例说明:
在这里插入图片描述

  • @Configuration:说明这是一个配置类
  • @EnableConfigurationProperties(ServerProperties.class):启用ConfigurationProperties功能,将配置文件中的值和属性配置类ServerProperties绑定起来,并将属性配置类ServerProperties注入到IOC容器中

点击ServerProperties.class:@ConfigurationProperties的作用就是从配置文件中获取指定的值和Bean属性进行绑定。所有能配置的属性都在xxxProperties属性配置类中封装着。
在这里插入图片描述
自动配置类:
在这里插入图片描述

  • @ConditionalOnWebApplication:判断当前是否是Web应用。
  • @ConditionalOnClass(CharacterEncodingFilter.class):当前项目中有没有CharacterEncodingFilter这个类。
  • @ConditionalOnProperty:配置文件中是否包含某项配置

配置文件中配置debug=true可以查看详细的自动配置报告:能够查看哪些配置类生效了,哪些配置类没有生效。

在这里插入图片描述

如果条件满足才将该组件注入到容器中:

  • @ConditionalOnBean 容器中存在指定Bean;
  • @ConditionalOnMissingBean 容器中不存在指定Bean;
  • @ConditionalOnExpression 满足SpEL表达式
  • @ConditionalOnClass 系统中有指定的类
  • @ConditionalOnMissingClass 系统中没有指定的类
  • @ConditionalOnSingleCandidate 容器中只有一个指定的Bean,或者这个Bean是首选Bean
  • @ConditionalOnProperty 系统中指定的属性是否有指定的值
  • @ConditionalOnResource 类路径下是否存在指定资源文件
  • @ConditionalOnWebApplication 当前是web环境
  • @ConditionalOnNotWebApplication 当前不是web环境
  • @ConditionalOnJndi JNDI存在指定项

三、SpringBoot中的配置文件

  • application.yml
  • application.properties

参考博客:SpringBoot中的两种配置文件

四、SpringBoot中的日志

SpringBoot默认使用SLF4j+logback实现日志记录输出。

参考博客:SpringBoot中的日志

五、SpringBoot——Web开发

静态资源、模板引擎、SpringMVC自动配置、RESTFUL、错误处理机制、嵌入式的Servlet容器。

参考博客:SpringBoot——Web开发

六、SpringBoot——数据访问

数据源的自动配置、SQL语句的初始化配置、JDBCTemplate、整合Druid数据源、整合Mybatis、SpringBoot JPA

参考博客:SpringBoot——数据访问

七、SpringBoot——启动配置原理

SpringBoot的启动流程,以及事件监听机制。

参考博客:SpringBoot——启动配置原理

八、SpringBoot——自定义starters

(1)创建空项目

(2)创建一个名为XXX-spring-boot-autoconfiguration的SpringBoot项目

  • 创建配置类XXXproperties
  • 创建服务
  • 创建配置类,使用服务

(3)创建一个名为XXX-spring-boot-starter的Maven项目

  • 引入XXX-spring-boot-autoconfiguration的依赖

(4)install :将我们的自定义启动器加入到本地仓库

参考博客:SpringBoot自动配置:自定义一个启动器Stater

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值