SpringBoot自动配置与源码分析

本文介绍了SpringBoot作为一个简化Spring项目的工具,其优势包括自动配置、Starter组件、内嵌Servlet容器和默认的Maven构建。文章详细解析了自动配置的工作原理,重点关注了@EnableAutoConfiguration和SpringFactoriesLoader在自动配置过程中的作用。
摘要由CSDN通过智能技术生成

SpringBoot

boot是启动的意思,所以,可以说springBoot是一个启动spring项目的一个工具,这个工具简化了spring的配置。

SpringBoot相较于Spring的优势

1.自动配置;使用Starter组件简化依赖管理。

2.内嵌的Servlet容器。

3.默认采用Maven作为构建工具。

在探索SpringBoot自动配置之前,先了解下什么是自动配置。

自动配置

所谓自动配置,可以理解为你声明了依赖,SpringBoot会自动配置相关依赖的组件,这些自动配置的组件可以在Spring应用程序中直接使用,无需手动配置。

举个例子:

引入了spring-boot-starter-data-redis依赖,我们可以直接通过 Autowired 注解自动从容器里面拿到相应的RedisTemplate对象。

源码分析

接下来看看SpingBoot代码中自动配置是如何实现的

@SpringBootApplication注解告诉SpringBoot这是一个SpringBoot应用程序的入口点。

点击进入注解@SpringBootApplication里面查看

@SpringBootConfiguration注解告诉SpringBoot,此类是主配置类,提供了应用程序配置,等价于Spring 的配置文件bean.xml

@ComponentScan注解用于指定Spring Boot自动扫描的包路径,以查找和注册组件、服务、配置类等。它默认会扫描主配置类所在的包及其子包中的组件(@Component、@Repository、@Service、@Controller、@Configuration等)。

@EnableAutoConfiguration注解:这个注解启用了SpringBoot的自动配置功能,告诉SpringBoot在指定的包路径下查找自动配置类,并加载它们到应用程序中。这些自动配置类通常是实现Spring Boot自动配置功能的组件,例如Spring Boot Starter等。

那么@EnableAutoConfiguration是如何查找和加载配置的呢?

点击进入注解@EnableAutoConfiguration里面查看

@AutoConfigurationPackage注解不仅会扫描主配置类所在的包及其子包中的组件,还会扫描包路径下定义的自动配置类。主要用于指定自动配置类的包路径。

@Import({AutoConfigurationImportSelector.class})注解: AutoConfigurationImportSelector负责选择和加载自动配置类,将所有符合条件(Spring.factories)的bean定义都加载到当前IOC容器中。

看来重点是关注AutoConfigurationImportSelector做了什么

点击进入AutoConfigurationImportSelector里面查看

找到selectImports方法:该方法是找配置文件的入口

进入selectImports方法中的getAutoConfigurationEntry方法查看

进入getAutoConfigurationEntry中的getCandidateConfigurations方法查看,该方法主要是去加载各个组件jar下的 spring.factories文件

看到SpringFactoriesLoader.loadFactoryNames方法和JDK内置的SPI机制中的ServiceLoader.load很类似。

进入SpringFactoriesLoader类对象

可以看到查找是从 META-INF/spring.factories 路径查找自动配置的。

SpringFactoriesLoader的底层原理其实就是借鉴于JDK的SPI机制。在这里,是Spring框架提供的一种扩展机制,用于实现框架的可拓展性。SPI机制一种解耦非常优秀的思想。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值