SpringBoot_框架自动配置原理入门(@SpringBootApplication)

自动配置原理入门

加载自动配置类

@SpringBootApplication
public class MyApplication {

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

点击注解@SpringBootApplication

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
  • @SpringBootConfiguration

    • @Configuration

    说明这也是一个配置类

  • @ComponentScan

    过滤扫描那些包,那些类

  • @EnableAutoConfiguration

    • @AutoConfigurationPackage 指定了默认的包规则

      • @Import({Registrar.class})

        自动配置包,指定了默认的包规则

        点Registra进去可以看到:

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QSDzaNqv-1660975928737)(源码分析.assets/image-20220820104655426.png)]

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mwbYEh5m-1660975928738)(源码分析.assets/image-20220820104803067.png)]、

    • @Import({AutoConfigurationImportSelector.class})

      点AutoConfigurationImportSelector进去可以看到

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HImC9jQw-1660975928738)(源码分析.assets/image-20220820110055431.png)]

      getAutoConfigurationEntry(annotationMetadata)

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dYRf73wb-1660975928739)(源码分析.assets/image-20220820110811743.png)]

      点击获取一些候选的配置这个方法

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BcPxH1cc-1660975928740)(源码分析.assets/image-20220820111534829.png)]

      点击loadFactoryNames方法

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f04IrUiN-1660975928740)(源码分析.assets/image-20220820111758994.png)]

      点击loadSpringFactories方法

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A2EcnyKF-1660975928741)(源码分析.assets/image-20220820112456947.png)]

      默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件,图中标注为核心包

      在项目jar中可以看到

      可以看到spring.factories文件中的信息就包含了getAutoConfigurationEntry(annotationMetadata)返回的configurations集合信息,有133个,当前Springboot的版本为2.6.11, 版本不同加载配置个数不同

      总结:

      • @Import({Registrar.class})registerBeanDefinitions()方法指定了默认的包规则,也就是启动类所在的包
      • 利用getAutoConfigurationEntry(annotationMetadata) 批量注册了一系列的配置组件
      • 利用List configurations = this.getCandidateConfigurations(annotationMetadata, attributes);获取了所有需要注册到容器中的类信息
      • 利用Map<String, List> loadSpringFactories(ClassLoader classLoader)工厂加载模式,得到所有组件
      • META-INF/spring.factories位置来加载一个文件,默认扫描所有,spring-boot-autoconfigure-2.6.11.RELEASE.jar这个是核心包

按需开启自动配置类

默认的133个配置组件会全部加载,但并不是全部生效

最终会按照条件装配规则,按需加载

  • 我们可以选择一个类进行验证,点击进入aop配置组件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rQnH09MB-1660975928741)(源码分析.assets/image-20220820115216079.png)]

  • 可以看到,我们没有引aop的包

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XX0ev0Rb-1660975928741)(源码分析.assets/image-20220820115541584.png)]

  • 在pom.xml文件中添加aop的启动类
    (官网地址:https://docs.spring.io/spring-boot/docs/2.6.11/reference/html/using.html#using.buil-systems.starters

         <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>
    
  • 刷新maven后,可以看到当前配置类中爆红已经消失了

  • 这也就说明,我们要想使用Springboot配置的这些默认组件,只需要在pom.xml中引入各自的启动类即可

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值