springBoot自动装配流程

1.什么是自动装配
    简单来说就是,通过SpringBoot提供的自动装配机制可以简化对接Spring的配置,减少配置文件,只需要配置到application.properties一个文件里就行了。
    
2.有什么好处

    就是简化配置
    
    例如以前要用mybatis,不仅要配Spring的配置文件,还要配置mybatis的配置文件,很麻烦。现在只需要引入自动装配的starter就行了,直接配置几个参数就行。
    
3.原理是什么
    基于Spring的spi机制来实现。
    a.实现自动装配的属性类。
    b.实现自动装配的类。
    c.META-INF\spring.factories 配置自动装配的类
    

--------------------------------------------------------------------------------------------------


自动配置SPI机制:
SpringApplication.run()
    启动springboot
        启动spring
            加载配置,调用ImportSelector接口的实现类selectImports()方法
                扫描META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,查找自动装配类,注入到spring
    OJBK


从META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中
SpringBootApplication
    @EnableAutoConfiguration
        @Import(AutoConfigurationImportSelector.class)
            AutoConfigurationImportSelector->DeferredImportSelector->ImportSelector
                selectImports()
                    getAutoConfigurationEntry()
                        getCandidateConfigurations()
                            ImportCandidates.load(AutoConfiguration.class, getBeanClassLoader())
                                private static final String LOCATION = "META-INF/spring/%s.imports";
                                    org.springframework.boot.autoconfigure.AutoConfiguration.imports
                                        org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfiguration
                                        org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration


--------------------------------------------------------------------------------------------------


Spring Boot 2.7.0 通过spring.factories加载自动配置类的方式成为过去式(弃用从spring.factories加载自动配置类),采用全新的方式加载自动配置类:需要被自动加载的类写在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件里,每一行是配置类的全类名。


--------------------------------------------------------------------------------------------------


mybatis自动装配:    
1.实现配置类MybatisProperties 通过@Configuration、@ConfigurationProperties(prefix = MybatisProperties.MYBATIS_PREFIX)注解,用于配置属性。
2.实现自动装配的类,MybatisAutoConfiguration,实现bean的注入,包括sqlSessionFactory、sqlSessionTemplate。
3.META-INF\spring.factories 配置自动装配的类。
4.AutoConfiguredMapperScannerRegistrar该类实现ImportBeanDefinitionRegistrar接口的registerBeanDefinitions方法来实现MapperScannerConfigurer的注入。
5.MapperScannerConfigurer实现了BeanDefinitionRegistryPostProcessor接口的postProcessBeanDefinitionRegistry方法,这个方法里面实现了@Mapper标签的扫描和注入。


--------------------------------------------------------------------------------------------------

你可能感兴趣的:(笔记)