springboot自动配置原理

springboot自动配置原理

在这里插入图片描述

查看@SpringBootApplication的声明

在这里插入图片描述

查看@EnableAutoConfiguration的声明
在这里插入图片描述

自动配置的核心是@Import(AutoConfigurationImportSelector.class),AutoConfigurationImportSelector类中的selectImports方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

下述文件里面写死了spring-boot一启动就要给容器中加载的所有配置类,,即xxxxAutoConfiguration

在这里插入图片描述

spring.factories文件中的类不是会被全部加载的,它是根据当前满足的条件进行过滤的。

以WebMvcAutoConfiguration为例,该自动配置类想要生效必须满足下述条件@ConditionalXxxx

在这里插入图片描述

//标注当前是一个配置类,而且不使用代理(每次返回的都是不同的bean实例)
@Configuration(proxyBeanMethods = false)
//想要当前配置生效,必须有servlet的运行环境
@ConditionalOnWebApplication(type = Type.SERVLET)
//想要当前配置生效,必须有Servlet、DispatcherServlet、WebMvcConfigurer这几个类
@ConditionalOnClass({ Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class })
//想要当前配置生效,容器中不能存在指定WebMvcConfigurationSupport类型的Bean;
@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)
//设置自动配置执行的优先级
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
//当前配置加载后,之后需要进行的操作
@AutoConfigureAfter({ DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class,
		ValidationAutoConfiguration.class })

当满足上述所属的条件时,WebMvcAutoConfiguration才会被加载。其中,@ConditionalOnBean(当前类名.class)注解,满足了用户自定义的配置优先于speingboot底层默认的配置,被该注解标注后,表明只有注解属性中对应的类型的bean不存在时,该配置类才加载。

总结:

  • SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration

  • 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。xxxxProperties里面拿。xxxProperties和配置文件进行了绑定(xxxProperties类中的属性值,在配置文件中取)

  • 生效的配置类就会给容器中装配很多组件

  • 只要容器中有这些组件,相当于这些功能就有了

  • 修改配置的方式

    • 用户直接自己@Bean替换底层的组件(自定义的优先于默认的)
    • 用户去看这个组件是获取的配置文件什么值就去修改(在application.properties、application.yml中)。修改方式:查看官方文档或者查看源码,找到对应的prefix

就去修改(在application.properties、application.yml中)。修改方式:查看官方文档或者查看源码,找到对应的prefix

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值