Springboot-自动配置原理分析

@SpringBootApplication

我们在使用SpringBoot的时候都要添加这个注解,这个注解里面还包含了其他注解,完成了自动配置的功能;我们跟进去看一下
在这里插入图片描述
使用@Import注解导入了一个类, AutoConfigurationImportSelector
在这里插入图片描述
上一篇博客介绍了SpringBoot的启动流程,在SpringBoot启动Spring容器过程中就会对@Import注解做处理;

如果大家想看Spring关于@Import, 实现了DeferredImportSelector接口的处理;可以idea搜索 this.deferredImportSelectorHandler.process() 进入;

在这里插入图片描述
首先调用了 handler::register,再去处理 groupImports();
在这里插入图片描述
register 方法,去调用 DeferredImportSelector 接口实现类的 getImportGroup() 方法,如果获得的group为空,就设置一个默认的group; new DeferredImportSelectorGrouping()

在这里插入图片描述
在这里插入图片描述依次调用
group.process(); group.selectImports(); 就能调用到通过@Import引入的AutoConfigurationImportSelector.AutoConfigurationGroup#process();
自动配置类的读取,过滤就在这里完成;

在这里插入图片描述断点执行到this.autoConfigurationEntries.add(autoConfigurationEntry); 发现自动配置类已经读取完成了, 我们主要看.getAutoConfigurationEntry(annotationMetadata)方法;

在这里插入图片描述
1.读取META-INF/spring.factories 下满足条件的类;
2.过滤配置类;

在这里插入图片描述这个方法在上一节SpringBoot启动流程中多次出现,它能获得META-INF/spring.factories 文件中,某个全路径类名的实现类; 这里制定的全路径类名是org.springframework.boot.autoconfigure.EnableAutoConfiguration
在这里插入图片描述

也就是说,我们在自己的项目中META-INF/spring.factories,自定义一个这种文件也能被SpringBoot加载为自动配置类;
在这里插入图片描述

进行配置类过滤时,获取过滤器.SpringBoot中默认有3种;具体的逻辑我没去追; 知道怎么使用就行了, 下面会取一个自动配置类来说明;
在这里插入图片描述

示例说明

@Configuration Spring底层会给配置创建cglib动态代理。 作用:就是防止每次调用本类的Bean方法而重新创建对象,Bean是默认单例的

@EnableConfigurationProperties(ServerProperties.class)启用可以在配置类设置的属性 对应的类

@Conditional派生注解(Spring注解版原生的@Conditional作用)作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置配里面的所有内容才生效;
在这里插入图片描述
在这里插入图片描述
@ConditionalOnWebApplication:Spring底层@Conditional注解(Spring注解版),根据不同的条件,如果满足指定的条件,整个配置类里面的配置就会生效; 判断当前应用是否是web应用,如果是,当前配置类生效。

@ConditionalOnClass:判断当前项目有没有这个类CharacterEncodingFilter;SpringMVC中进行乱码解决的过滤器。

@ConditionalOnProperty:判断配置文件中是否存在某个配置 spring.http.encoding.enabled;如果不存在,判断也是成立的;

@EnableConfigurationProperties(ServerProperties.class)
表示将application.yml 中的配置绑定到ServerProperties 的属性中;
在这里插入图片描述
ServerProperties通过 @ConfigurationProperties 注解将配置文件与自身属性绑定。

自定义Starter

正常我们用的是maven引入jar包的方式,我这里为了省劲就在当前项目中测试了;

1.新建Listener, SpringBoot启动完成后输出配置信息;
在这里插入图片描述

2.新建自动配置类,并设置启用条件;
在这里插入图片描述
3.新建配置绑定类;
在这里插入图片描述
4.新建/META-INF/spring.factories ,添加listener,autoConfig
在这里插入图片描述

第一次启动,我们进行任何配置,Spring报错;找不到DemoProperties
在这里插入图片描述
在这里插入图片描述

第二次,我们添加上配置信息;正常运行;
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值