0
点赞
收藏
分享

微信扫一扫

SpringBoot中“@SpringBootApplication“自动配置原理《第七课》

北溟有渔夫 2022-09-17 阅读 221

了解几个注解的概念下面的是核心注解

第一点:@SpringBootApplication介绍:

第二点:public @interface SpringBootApplication 

@SpringBootConfiguration:springboot的配置  
  @Configuration:spring配置类      
  @Component:说明这也是spring的组件   
     @EnableAutoConfiguration::自动配置   
 @AutoConfigurationPackage:自动配置包  

    @Import(AutoConfigurationPackages.Registrar.class):自动配置‘包注册’  

  @Import(AutoConfigurationImportSelector.class):自动配置选择

@EnableAutoConfiguration 本文章以这个注解贯通自动配置原理 其他的细节下篇文章解释为了读者能看懂原理本文参用图片的方式来介绍

package com.bing.springboot0906;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Springboot0906Application {

    public static void main(String[] args) {
        SpringApplication.run(Springboot0906Application.class, args);
    }

}
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)

上面的代码啥意思这里不介绍了上面有具体的说明

在上面的图片中点击EnableAutoConfiguration 后会发现上面图片代码

 @Import(AutoConfigurationImportSelector.class):自动配置选择  点击下面的代码 AutoConfigurationImportSelector你会发现下面类中的代码 完全是考验Java的基础的时候了。

上面标记的红色位置是重点哦

protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
        List<String> configurations = new ArrayList(SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()));
        ImportCandidates.load(AutoConfiguration.class, this.getBeanClassLoader()).forEach(configurations::add);
        Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories nor in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you are using a custom packaging, make sure that file is correct.");
        return configurations;
    }

上面的代码 获取候选配置

点击这个进去:SpringFactoriesLoader

public final class SpringFactoriesLoader {
    public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";
    private static final Log logger = LogFactory.getLog(SpringFactoriesLoader.class);
    static final Map<ClassLoader, Map<String, List<String>>> cache = new ConcurrentReferenceHashMap();

    private SpringFactoriesLoader() {
    }

点击loadFactoryNames获取所有文件的配文件名称

找到程序出口

下篇文章链接

@SpringBootApplication注解SpringBoot深度理解(课时八)_星辰镜的博客-CSDN博客​​​​​​​

举报

相关推荐

0 条评论