@SpringBootApplication详细分析

如下图 @SpringBootApplication是springboot项目启动类的注解,也是程序的入口,本文就是具体解析一下这个注解到底做了什么

@SpringBootApplication详细分析_第1张图片

一.@SpringBootApplication的构成

1.这个注解是一个组合注解,他是有三个注解合成的,对应图中的123步,而这三个注解中的@EnableAutoConfiguration注解又是一个复合注解,对应图中的2,3,但是其实@AutoConfigurationPackage只是一个壳子,主要是@Import起作用,接下来我们详细的街道一下各个注解的作用

@SpringBootApplication详细分析_第2张图片

二.各个注解的作用

1.@SpringBootConfiguration

1.这个注解本质上只起了一个新名称,本质上还是一个**@Configuration**
@SpringBootApplication详细分析_第3张图片

2.@Configuration我们已经很熟悉了,类似于XML定义的配置类,那么在这里的含义就是代表我们的Application类是一个配置类,当然也是IOC中的一个Bean,如图可以证明,Application被加载,beanName为application
@SpringBootApplication详细分析_第4张图片

2.@ComponentScan

1.扫描指定路径(basePackages = “com.example”)所在的包以及子包下所有包含(@Component、@Controller、@Service、@Repository等注解)的类并注册到IOC容器中,那么具体能做啥,其实我们可以问问chat-gpt哈哈哈
@SpringBootApplication详细分析_第5张图片
2.注意在这里,我们深入研究一下ComponentScan的剔除具体做了什么,避免囫囵吞枣

  1. type = FilterType.CUSTOM代表的是一个自定义过滤类型,
    意思就是:可以指定一个自定义的规则,根据规则决定是否作为bean放到容器中。其实就是实现一个TypeFilter接口的类中有个match方法,容器会把每个类当做参数传到这个方法中,返回true则剔除(因为我们这里用在excludeFilters,如果是includeFilters则不剔除)

  2. 而class是配置了两个过滤器类AutoConfigurationExcludeFilter和TypeExcludeFilter,具体过滤什么拒绝
    以AutoConfigurationExcludeFilter为例,
    @SpringBootApplication详细分析_第6张图片

  3. AutoConfigurationExcludeFilter(自动配置过滤器),先拿到了META-INF/spring.factories下配置的所有自动配置类,然后一一匹配我们的扫面的类,如果发现存在自动配置中则剔除,一句话总结,过滤项目中存在的自动装配的类,不加载到IOC容器中
    @SpringBootApplication详细分析_第7张图片

  4. TypeExcludeFilter则是先获取所有TypeExcludeFilter类型的的bean,(项目中是没有这个的,所以size是0),然后循环其中的每一个进行实现match匹配过滤,匹配到则返回true进行过滤。其关键作用在于:提供一种扩展机制,能让我们向IOC容器中注册一些自定义的组件过滤器,从而在包扫描的过程中过滤它们。会从 BeanFactory 中获取所有类型为 TypeExcludeFilter 的组件,去执行自定义的过滤方法。

@SpringBootApplication详细分析_第8张图片

3.@EnableAutoConfiguration

1.@AutoConfigurationPackage

@Import(AutoConfigurationPackages.Registrar.class)

2.@Import(AutoConfigurationImportSelector.class)

你可能感兴趣的:(spring,boot)