SpringBoot自动配置与源码分析
SpringBootboot是启动的意思,所以,可以说springBoot是一个启动spring项目的一个工具,这个工具简化了spring的配置。SpringBoot相较于Spring的优势1.自动配置;使用Starter组件简化依赖管理。2.内嵌的Servlet容器。3.默认采用Maven作为构建工具。在探索SpringBoot自动配置之前,先了解下什么是自动配置。
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等。自动配置类是通过@AutoConfiguration注解标记的类,这些类位于spring-boot-autoconfigure包中。自动配置类的核心内容也是配置Bean,可以添加条件和规则,只有满足特定的条件和规则,这些Bean才会生效。
那么@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 路径查找自动配置的。
如果开发者想要通过spring.factories
文件来提供自定义的自动配置,那么他们确实需要在该文件中添加相应的条目。
例如:
# 自动配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.config.MyAutoConfiguration,\
com.example.config.AnotherAutoConfiguration
# 环境后处理器
org.springframework.boot.env.EnvironmentPostProcessor=\
com.example.env.MyEnvironmentPostProcessor
# 应用监听器
org.springframework.context.ApplicationListener=\
com.example.listeners.MyApplicationListener
总结
Spring的自动配置通过条件注解、@Configuration注解、Spring Factories机制、自动配置类和@EnableAutoConfiguration注解等方式实现。这些机制共同工作,使得Spring Boot能够根据项目中引入的依赖和配置文件的内容,自动选择和配置适合的组件和功能,从而极大地简化了开发者的配置工作。
更多推荐
所有评论(0)