Spring Boot是伴随着Spring4.0共同诞生的,它的目的就是简化spring的配置及开发,并协助开发人员可以整体管理应用程序的配置而不再像以前那样需要做大量的配置工作,它提供了很多开发组件,并且内嵌了web应用容器,如tomcat和Jetty等。其目的便是使我们的开发变得简化并且能大幅度提高开发人员的开发效率,为了简化Spring功能的配置我们可以引入或启动我们需要的Spring功能。这样做的好处就是避免开发人员过多的对框架的关注,而把更多的精力与时间放在系统的业务逻辑代码中。

1.基于你对springboot的理解描述一下什么是springboot

它是一个服务于spring框架的框架,能够简化配置文件,快速构建web应用,
内置tomcat,无需打包部署,直接运行。

2.约定优于配置指的是什么?

maven 的目录结构
a) 默认有 resources 文件夹存放配置文件
b) 默认打包方式为 jar
spring-boot-starter-web 中默认包含 spring mvc 相关依赖以及内置的 tomcat 容器,使得构建一个 web 应用更加简单
默认提供 application.properties/yml 文件
默认通过 spring.profiles.active 属性来决定运行环境时读取的配置文件
EnableAutoConfiguration 默认对于依赖的 starter 进行自动

3.@SpringBootApplication由哪几个注解组成,这几个注解分别表示什么作用

SpringBootApplication 本质上是由 3 个注解组成,分别是

@Configuration
@EnableAutoConfiguration
@ComponentScan
@Configuration:
在启动类里面标注了@Configuration,意味着它其实也是一个 IoC
容器的配置类

@EnableAutoConfiguration:
springboot 应用把所有符合条件的@Configuration 配置
都加载到当前 SpringBoot 创建并使用的 IoC 容器中。

@ComponentScan:
ComponentScan 默认会扫描当前 package 下的的所有加
了@Component 、@Repository、@Service、@Controller的类到 IoC 容器中;

4.springboot自动装配的实现原理

如果是之前的spring中使用redis需要在xml定义bean,现在只需要依赖一个spring-boot-starter-data-redis
的jar包,jar中定义了RedisConfiguration,当启动的时候spring会自动装载RedisConfiguration,那spring是如何知道配置类在哪里的呢?RedisConfiguration类的路径放在了classpath*META-INF/spring.factories的文件中,spring会加载这个文件中配置的configuration

(1)SpringApplication.run(AppConfig.class,args);执行流程中有refreshContext(context);这句话.
(2)refreshContext(context);内部会解析我们的配置类上的标签.实现自动装配功能的注解@EnableAutoConfiguration
(3)会解析@EnableAutoConfiguration这个注解里面的@Import引入的配置类.AutoConfigurationImportSelector
(4)AutoConfigurationImportSelector这个类中有这个方
法.SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
(5)SpringFactoriesLoader.loadFactoryNames的作用就是读取jar包中的/项目中的META-INF/spring.factories文件.
(6)spring.factories配置了要自动装配的Configuration类

5.spring中的spi机制的原理是什么?

SPI的全名为Service Provider Interface,为某个接口寻找服务实现的机制。
当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。通过这个约定,就不需要把服务放在代码中了,通过模块被装配的时候就可以发现服务类了。

在springboot的自动装配过程中,最终会加载META-INF/spring.factories文件,而加载的过程是由SpringFactoriesLoader加载的。从CLASSPATH下的每个Jar包中搜寻所有META-INF/spring.factories配置文件,然后将解析properties文件,找到指定名称的配置后返回。需要注意的是,其实这里不仅仅是会去ClassPath路径下查找,会扫描所有路径下的Jar包,只不过这个文件只会在Classpath下的jar包中。

通过spi技术可以自定义starter,在自定义的配置文件META-INF/spring.factories中加入实现类,依赖这个starter的项目就会扫描jar包下的配置,找到实现类进行装载实例化

springboot核心原理相关推荐

  1. SpringBoot核心原理:自动配置、事件驱动、Condition

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/l6108003/article/ details/106966386 前言 SpringBoot是Spring的包装,通过自动 ...

  2. SpringBoot 核心原理分析

    spring-boot-loader maven将SpringBoot启动类打到fatJar JarLauncher SpringApplication SpringBoot项目的入口 启动类: @S ...

  3. SpringBoot 源码解析 (一)----- SpringBoot核心原理入门

    目录 Spring Boot 概述 什么是 Spring Boot 使用 Spring Boot 有什么好处 Spring Boot HelloWorld 导入依赖spring boot相关的依赖 编 ...

  4. springcloud实战:springboot的核心原理

    Spring Boot核心原理 通过上篇的学习,读者应该对Spring Boot有了一个大致的认识,利用Spring Boot可以极大地简化应用程序的开发,这都归功于Spring Boot的四大核心原 ...

  5. 轻松理解之SpringBoot实现原理

    一.什么是SpringBoot? SpringBoot是一个快速开发框架,快速的将一些常用的第三方依赖整合(原理:通过Maven子父工程的方式),简化XML配置,全部采用注解形式,内置Http服务器( ...

  6. 深入解析SpringBoot核心运行原理和运作原理源码

    SpringBoot核心运行原理 Spring Boot 最核心的功能就是自动配置,第 1 章中我们已经提到,功能的实现都是基于"约定优于配置"的原则.那么 Spring Boot ...

  7. Spring Boot 核心原理与源码解析 - 目录

    准备重新写 SpringBoot 配置文件解析原理 , 先在这里把要写的内容记下来 Spring Boot 核心原理与源码解析 - 目录 1\何时解析\如何解析 application.propert ...

  8. redis深度历险:核心原理与应用实践_送你一份Redis书单,以后使用缓存的问题不用再问我啦!...

    点击蓝色"程序员书单"关注我哟 加个"星标",每天带你读好书! ​ 经过了10多年的发展,Java Web从开发框架到社区都已经非常成熟,很多程序员都可以通过使 ...

  9. springboot启动原理及其流程

    springboot启动原理精简版 spring,springMVC和spring有什么区别? 一 springboot启动流程及其相关流程概览. 二 springboot的启动类入口 三 sprin ...

最新文章

  1. neo4j应用场景举例超过论文索引 公司投资风险 图书引用等场景的举例
  2. N皇后问题的两个最高效的算法
  3. Linux学习之服务器搭建——DHCP服务器
  4. python3连接oracle数据库真操蛋_为64位Windows7的Python3安装MySQLdb
  5. docker容器安装oracle10g
  6. 在mini2440上面搞定CC2500驱动
  7. PHP处理微信昵称emoji表情符号和特殊颜文字符
  8. python psutil 汇总 tcy
  9. DragonBones快速入门指南1
  10. gl_FragCoord 的含义
  11. 项目管理中的冲突管理
  12. 前端|网页制作秘密武器 之发光边框
  13. android studio编程实例,Android Studio JNI 开发简单案例
  14. Python爬虫下一代网络请求库httpx和parsel解析库测评
  15. python3 turtle画正方形、矩形、正方体、五角星、奥运五环
  16. 项目四 长方体的计算
  17. yolov5_web_图片在线识别
  18. 如何将一个PPT生成一个二维码?扫码就能查看文件内容
  19. 分享一个安卓app自动化遍历工具--Appetizer
  20. 【尝鲜版】ChatGPT插件开发指南

热门文章

  1. 自然语言不等于英语,为什么NLPer应当认识到这个问题,以及该怎么做?
  2. 数据流分析与 SSA | 什么是静态单赋值 SSA
  3. 标准访问控制列表和扩展的访问控制列表有什么区别??
  4. 第二十一篇:伦理/道德Ethics
  5. matlab cat
  6. solr研磨之游标分页
  7. Kotlin学习笔记(五) 扩展函数 扩展属性
  8. 虚拟化云计算平台Proxmox VE
  9. 关于fastlane自动化打包
  10. zabbix3.0禁用guest用户