web开发——Spring Boot(纯八股)

一、Spring Boot是什么

本质上来说,Spring Boot就是Spring,它本事不提供Spring的核心功能,而是作为Spring的脚手架框架,达到快速构建项目、预置三方配置、开箱即用的目的。
Spring Boot的优点:

  • 可以快速构建项目
  • 可以对主流开发框架的无配置集成
  • 项目可以独立运行,无需外部依赖servlet容器
  • 提供运行时的应用监控
  • 极大提高开发、部署效率
  • 可以与云计算天然集成

二、Spring Boot Starter

2.1 什么是starter

SpringBoot开发项目可以简化Spring应用的搭建以及开发过程,因为它约定大约配置的策略以及自动装配的特点。

约定大约配置:SpringBoot指定的特定的方式进行配置(application.properties/yaml),开发人员不需要像在Spring框架开发时定义配置文件。
自动装配:在使用某个组件或框架时需要引用其依赖、配置类、配置文件等工作时,SpringBoot帮我们做了这些工作。
Starter就是自动装配的具体实现,其就是一个maven项目,对某个组建的依赖、配置进行管理。通过导入“starter”模块更容易使用这个组件

2.2 starter的作用

Spring Boot通过提供众多起步依赖(Starter)降低项目依赖的复杂度。起步依赖本质上是一个Maven项目对象模型(Project Object Model, POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。

2.3 自动装配的过程

自动装配核心过程

  1. SpringBoot通过@EnableAutoConfiguration注解开启自动配置,加载spring.factories中注册的各种AutoConfiguration类
  2. 当某个AutoConfiguration类满足其注解@Conditional指定的生效条件(Starters提供的依赖、配置或Spring容器中是否存在某个Bean等)时,实例化该AutoConfiguration类中定义的Bean(组件等),并注入Spring容器,就可以完成依赖框架的自动配置。

三、SpringBoot的启动流程

SpringBoot项目创建完成会默认生成一个名为*Application的入口类,通过该类的main方法启动SpringBoot项目。
在main方法中,通过SpringApplication的静态方法(run方法)进行SpringApplication的实例化操作,再针对实例化对象调用另外一个run方法来
SpringBoot的启动流程
SpringApplication再run方法中重点做了以下操作

  1. 获取监听器和参数配置
  2. 打印banner
  3. 创建并初始化容器
  4. 监听器发送通知
    此外还涉及启动时长统计、异常报告、启动日志、异常处理等操作。

四、Spring Boot的注解(问到自然死)

@SpringBootApplication注解:

在Spring Boot入口类中,唯一的一个注解就是@SpringBootApplication。它是Spring Boot项目的核心注解,用于开启自动配置,准确说是通过该注解内组合的@EnableAutoConfiguration开启了自动配置。

@EnableAutoConfiguration注解:

@EnableAutoConfiguration的主要功能是启动Spring应用程序上下文时进行自动配置,它会尝试猜测并配置项目可能需要的Bean。自动配置通常是基于项目classpath中引入的类和已定义的Bean来实现的。在此过程中,被自动配置的组件来自项目自身和项目依赖的jar包中。

@Import注解:

@EnableAutoConfiguration的关键功能是通过@Import注解导入的ImportSelector来完成的。从源代码得知@Import(AutoConfigurationImportSelector.class)是@EnableAutoConfiguration注解的组成部分,也是自动配置功能的核心实现者。

@Conditional注解:

@Conditional注解是由Spring 4.0版本引入的新特性,可根据是否满足指定的条件来决定是否进行Bean的实例化及装配,比如,设定当类路径下包含某个jar包的时候才会对注解的类进行实例化操作。总之,就是根据一些特定条件来控制Bean实例化的行为。

@Conditional衍生注解:

在Spring Boot的autoconfigure项目中提供了各类基于@Conditional注解的衍生注解,它们适用不同的场景并提供了不同的功能。通过阅读这些注解的源码,你会发现它们其实都组合了@Conditional注解,不同之处是它们在注解中指定的条件(Condition)不同。

@ConditionalOnBean:在容器中有指定Bean的条件下。

@ConditionalOnClass:在classpath类路径下有指定类的条件下。

@ConditionalOnCloudPlatform:当指定的云平台处于active状态时。

@ConditionalOnExpression:基于SpEL表达式的条件判断。

@ConditionalOnJava:基于JVM版本作为判断条件。

@ConditionalOnJndi:在JNDI存在的条件下查找指定的位置。

@ConditionalOnMissingBean:当容器里没有指定Bean的条件时。

@ConditionalOnMissingClass:当类路径下没有指定类的条件时。

@ConditionalOnNotWebApplication:在项目不是一个Web项目的条件下。

@ConditionalOnProperty:在指定的属性有指定值的条件下。

@ConditionalOnResource:类路径是否有指定的值。

@ConditionalOnSingleCandidate:当指定的Bean在容器中只有一个或者有多个但是指定了首选的Bean时。

@ConditionalOnWebApplication:在项目是一个Web项目的条件下。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值