【SpringBoot】-- 核心原理

本文主要探讨SpringBoot的核心原理,包括约定优于配置的概念,如Maven的默认目录结构和自动配置资源;@SpringBootApplication注解的组件扫描、自动配置功能;Spring Boot自动配置的实现流程,涉及@EnableAutoConfiguration和AutoConfigurationImportSelector;以及SPI扩展点机制的介绍,用于增强应用的扩展性。
摘要由CSDN通过智能技术生成

springboot是服务于spring框架的框架,可以帮助使用Spring的开发者快速构建Spring框架,它基于了约定由于配置的理念,服务的范围是简化配置文件;

1.约定由于配置:

约定优于配置,是一种软件设计范式,目的在于减少开发人员需要做决定的数量,使开发变得简单,但不失灵活

体现:

  • maven的目录结构
    • 默认以jar的方式打包
    • 默认会有resource文件夹
    • 默认提供application.properties/yml文件
  • main方法运行就会启动web工程,启动时创建一个内置的tomcat容器,将当前项目部署在此容器中
  • 可以通过Spring,profiles.active属性来决定运行不同环境读取的配置文件
  • maven里面引用了spring-boot-starter-web
    • 会自动添加spring mvc工程所需要的所有东西

2. 重点需要了解的内容

对spring 已有的东西进行封装然后创建出来的新东西:

  1. AutoConfiguration 自动装配
  2. Starter
  3. Actuator
  4. SpringBoot CLI

3.启动类上的复合注解: @SpringBootApplication

本质上复合了@EnableAutoConfiguration,@ComponentScan,@Configuration

  1. EnableAutoC onfiguration
    EnableAutoConfiguration 的 主要作用其实就是帮助springboot 应用把所有符合条件的@Configuration 配置都自动加载到当前 SpringBoot 创建并使用的 IOC 容器中
  2. ComponentScan
    扫描@Component/@Reponsitory/@Service/@Controller 携带了上面注解的类都会被扫描到IOC容器内托管
  3. Configuration
    任何一个标注了@Configuration 的 Java 类定义都是一个JavaConfig 配置类。而在这个配置类中,任何标注了@Bean 的方法,它的返回值都会作为 Bean 定义注册到Spring 的 IOC 容器,方法名默认成为这个 bean 的 id;

4. Spring Boot 自动配置原理是什么?

  1. 在复合注解SpringBootapplication中,包含EnableAutoConfiguration启动spring应用程序上下文的自动配置,EnableAutoConfiguration内会导入一个AutoConfigurationImportSelector类详细流程是这样:
    (1)SpringApplication.run(AppConfig.class,args);执行流程,中有refreshContext(context);
    (2)refreshContext(context);内部会解析我们的配置类上的标签.实现自动装配功能的注解@EnableAutoConfiguration
    (3)会解析@EnableAutoConfiguration这个注解里面的@Import引入的配置类.AutoConfigurationImportSelector
  2. 这个类会去读取spring.factories下key为EnableAutoConfiguration对应的全限定名的值;
  3. spring.factories里配置的所有key-value,是要告诉springBoot这个stareter所需要加载的XXXAutoConfiguraion类,也就是我们想要自动注入的bean;

image.png
下的getCandidateConfigurations()

    protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
   
        // 核心代码 
        // 调用了方法:spring.core中的loadFactoryNames()
        // 参数1--this.getSpringFactoriesLoaderFactoryClass()
        // 参数2--this.getBeanClassLoader() 
        List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值