栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Boot自动配置原理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot自动配置原理


文章目录

@SpringBootApplication@EnableAutoConfiguration

@AutoConfigurationPackage@import 总结

@SpringBootApplication

@SpringBootApplication注解由@SpringBootConfiguration、@ComponentScan、@EnableAutoConfiguration三个注解组成

@SpringBootConfiguration:我们点进去以后可以发现底层是Configuration注解,说白了就是支持JavaConfig的方式来进行配置(使用Configuration配置类等同于XML文件)。@EnableAutoConfiguration:开启自动配置功能@ComponentScan:扫描注解,默认是扫描当前类下的package。将@Controller/@Service/@Component/@Repository等注解加载到IOC容器中。

所以SpringBoot入口类可以写成:

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public class KnowledgebaseApplication {

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

我们知道SpringBoot可以帮我们减少很多的配置,也肯定听过“约定大于配置”这么一句话,那SpringBoot是怎么做的呢?其实靠的就是@EnableAutoConfiguration注解。

简单来说,这个注解可以帮助我们自动载入应用程序所需要的所有默认配置。

@AutoConfigurationPackage:自动配置包@import:给IOC容器导入组件 @AutoConfigurationPackage

图中所示依靠@import注解。点进去看重要的代码是:

@Override
public void registerBeanDefinitions(Annotationmetadata metadata,
        BeanDefinitionRegistry registry) {
    register(registry, new Packageimport(metadata).getPackageName());
}

在默认的情况下就是将:主配置类(@SpringBootApplication)的所在包及其子包里边的组件扫描到Spring容器中。

注意:

@Controller/@Service/@Component/@Repository这些注解是由ComponentScan来扫描并加载的。诸如 @Entity 此类的注解是由@AutoConfigurationPackage扫描并加载 @import

AutoConfigurationimportSelector.class

此时只看到了SpringFactoriesLoader.loadFactoryNames()方法加载

此时可以知道:

FACTORIES_RESOURCE_LOCATION的值是meta-INF/spring.factoriesSpring启动的时候会扫描所有jar路径下的meta-INF/spring.factories,将其文件包装成Properties对象从Properties对象获取到key值为EnableAutoConfiguration的数据,然后添加到容器里边。

总结

@SpringBootApplication等同于下面三个注解:

@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan

其中@EnableAutoConfiguration是关键(启用自动配置)该注解又通过 @import 注解导入了AutoConfigurationimportSelector类,在该类中加载 meta-INF/spring.factories 的配置信息。然后筛选出以 EnableAutoConfiguration 为 key 的数据,加载到 IOC 容器中,实现自动配置功能!


JVM内存泄漏和内存溢出的原因
JVM常用监控工具解释以及使用
Redis 常见面试题(一)
ClickHouse之MaterializeMySQL引擎(十)
三种实现分布式锁的实现与区别
线程池的理解以及使用

号外!号外!

最近面试BAT,整理一份面试资料,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。想获取吗?如果你想提升自己,并且想和优秀的人一起进步,感兴趣的朋友,可以在扫码关注下方公众号。资料在公众号里静静的躺着呢。。。

喜欢就收藏认同就点赞支持就关注疑问就评论

一键四连,你的offer也四连

————————————————————————————————

本文作者:Java技术债务
原文链接:https://www.cuizb.top/myblog/article/1644763339
版权声明: 本博客所有文章除特别声明外,均采用 CC BY 3.0 CN协议进行许可。转载请署名作者且注明文章出处。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/735939.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号