目录
1.什么是起步依赖?
2.起步依赖如何工作?
3.什么是自动配置?
4.自动配置原理
1.什么是起步依赖?
起步依赖是Spring Boot中的一个概念,它实质上是一个Maven项目对象模型(POM),在这个POM中,定义了开发特定类型Spring Boot应用所需的所有依赖库。例如,spring-boot-starter-web
就包含了构建Web应用所需的所有基本组件,如Spring MVC、Tomcat等。开发者只需引入这一个起步依赖,就可以得到一个完整的Web开发环境。
2.起步依赖如何工作?
继承与依赖管理
- 每个起步依赖都继承了
spring-boot-starter-parent
,这是管理依赖版本的关键。spring-boot-starter-parent
定义了一系列开发中常用的库和插件的统一版本,确保了项目依赖的一致性。spring-boot-starter-parent是一个特殊的POM。 - 通过这种方式,Spring Boot确保了项目的各个库版本之间的兼容性,避免了版本冲突的问题。
自动配置
- Spring Boot的核心理念之一是“约定优于配置”(Convention over Configuration)。简单来说,如果你遵循了一定的命名规则和目录结构,Spring Boot就能自动配置你的项目。
- 起步依赖通过引入对应的自动配置类来实现这一功能。这些自动配置类位于
spring.factories
文件中,它们根据项目中已有的依赖和条件注解如(@ConditionalOnClass、@ConditionalOnMissingBean等)来决定哪些配置生效。 - @SpringBootApplication注解是Spring Boot自动配置的核心,它封装了三个重要的注解@EnableAutoConfiguration(Springboot实现自动化配置的核心注解,内封装@Import注解)、@ComponentScan(组件扫描,默认扫描当前引导类所在包及其子包)和@SpringBootConfiguration(该注解与@Configuration注解作用相同,用来声明当前也是一个配置类)
。其中@EnableAutoConfiguration告诉Spring Boot根据添加的依赖自动配置相应的设置。
简化项目搭建
开发者只需要引入相关的起步依赖,即可自动获得所需要的全部依赖库和自动配置,无需手动一个个添加依赖,极大简化了项目初始化的复杂度。
3.什么是自动配置?
自动配置是Spring Boot根据添加的依赖和应用程序的实际配置,自动为你配置Spring应用程序的行为,简单来说,它减少了你需要手动编写的配置量,让你可以更专注于业务逻辑的开发。当Spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要手动去声明,从而简化了开发,省去繁琐的配置操作。
4.自动配置原理
知识一:@ComponentScan组件扫描(配置了这一项,默认就会失效,所以要把之前的包也带上)
@ComponentScan({"com.example","com.deme"})
@SpringBootApplication
public class SpringbootMybatisQuickstartApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisQuickstartApplication.class, args);
}
}
知识二:@Import导入。使用@Import导入的类会被Spring加载到IOC容器中,导入形式主要有以下几种:
导入普通类、导入配置类、导入ImportSelector接口实现类
//@Import({TokenParser.class})导入普通类
//@Import({HeaderConfig.class})导入配置类
//@Import({MyImportSelector.class})导入ImportSelect接口实现类
@SpringBootApplication
public class SpringbootMybatisQuickstartApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisQuickstartApplication.class, args);
}
}
@EableXxxx注解,封装@Import注解(更加方便)
知识三:条件注解
Spring Boot使用条件注解(@Conditional)来决定是否应用某个自动配置(按照一定的条件进行判断,在满足给定条件后才会注册对应的bean对象到SpringIOC容器中)。这些条件注解是一个父注解,派生出大量的子注解包括@ConditionalOnClass(
表示当类路径下存在某个类时,当前配置生效,注册bean到IOC容器)
、@ConditionalOnMissingBean(
表示当容器中不存在某个bean时,当前配置生效,注册bean到IOC容器)
、@ConditionalOnProperty(判断配置文件中有对应的属性和值,才注册到bean到IOC容器)
等。可以写在类和方法上。