• SpringBoot自动配置原理


    @SpringBootApplication是一个复合注解
    由@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan组成

    • @SpringBootConfiguration:标识启动类是一个IOC容器的配置类

    • @EnableAutoConfiguration:

       @AutoConfigurationPackage:扫描启动类所在包及子包中所有的组件,生成实体bean并交给IOC容器管理
       @Import({AutoConfigurationImportSelector.class}):会加载META-INF/spring.factories文件,
       并调用该文件中的自动配置类完成自动配置工作,所以我们只需再application.yml中提供mysql的url、
       用户名、密码等信息即可完成mybatis的自动配置
      
      • 1
      • 2
      • 3
      • 4
    • @ComponentScan:配置springboot要扫描的包

    1.@SpringBootApplication注解

    springboot是基于spring的新型的轻量级框架,最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置

    @SpringBootApplication//标注在某个类上,表示这个类是SpringBoot的启动类
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以要揭开SpringBoot的神秘面纱,我们要从这两位开始就可以了。

    @SpringBootConfiguration//表示当前类是一个IoC容器的配置类
    @EnableAutoConfiguration //开启SpringBoot自动装配功能
    @ComponentScan(excludeFilters = {// 扫描路径设置
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
    	@Filter(type = FilterType.CUSTOM, classes =AutoConfigurationExcludeFilter.class) })
    public @interface SpringBootApplication {
    ...
    }    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.@SpringBootConfiguration注解

    包括了@Configuration,配合@Bean代替xml配置文件的形式注入bean:

    a)xml配置文件的形式注入bean

    <bean id="mockService" class="..MockServiceImpl">
    ...
    bean>
    
    • 1
    • 2
    • 3

    b)注解配置形式注入bean

    @Configuration
    public class MockConfiguration{
        /*
         *任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认成该 
         *bean定义的id。
         */
        @Bean
        public MockService mockService(){
            return new MockServiceImpl();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.@EnableAutoConfiguration注解

    @EnableAutoConfiguration:开启SpringBoot自动装配功能

    @AutoConfigurationPackage//controller、service----->IOC容器
    @Import(EnableAutoConfigurationImportSelector.class)//自动配置
    public @interface EnableAutoConfiguration {
    ...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.1.@AutoConfigurationPackage注解

    @Import(AutoConfigurationPackages.Registrar.class)
    public @interface AutoConfigurationPackage {
    
    }
    
    • 1
    • 2
    • 3
    • 4

    AutoConfigurationPackages.Registrar.class将启动类(@SpringBootApplication标注的类)的所在包及子包里面所有组件扫描到Spring容器;

    在这里插入图片描述

    3.2.@Import注解

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    EnableAutoConfigurationImportSelector读取META-INF/spring.factories的值,将这些值作为配置类加载到IOC容器中,帮助我们进行自动配置工作。

    4.@ComponentScan

    我们可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从@ComponentScan所在类的package进行扫描。

  • 相关阅读:
    深入理解React中fiber
    ubuntu22.04为什么鼠标会自动丢失焦点
    【老生谈算法】matlab实现蚁群算法源码——蚁群算法
    使用Arduino简单测试HC-08蓝牙模块
    java常用集合及常用类
    supOS APP开发者课程练习册
    C语言编程程序实现打分系统,输入十个分数(实型数据)去掉一个最高分,一个最低分,求出剩下分数的平均分输出(保留两位小数)
    MySQL存储引擎
    ajax封装:get封装方式、post封装方式
    使用JavaScript的效果实现输入相关信息计算票价的效果
  • 原文地址:https://blog.csdn.net/qq_57570052/article/details/136537635