基本概念
Spring Boot是一个基于Spring Framework的快速应用开发框架,它通过自动装配(Auto Configuration)实现了对Spring应用的自动化配置。自动装配能够大幅减少开发者的配置工作,提高了开发效率。
step 1.starter依赖介绍
Spring Boot的Starter是一种依赖描述符,用于封装相关功能的依赖,配置和代码,并且能够通过简单引入依赖来快速启用特定功能。Starter的目的是为了简化构建Spring应用程序的配置和依赖管理过程。 Spring Boot Starter是Spring Boot提供的一种规范和约定,定义了一种模块化的方式,可以方便地集成和启用特定功能。 我们可以遵循这种方式来创建自定义的 Starter,以下是创建 Starter 组件的步骤
创建自定义的 Starter 模块
- 创建一个 Maven 或 Gradle 模块,命名为 spring-boot-starter-mybatis(以"spring-boot-starter-"为前缀是约定)
- 并在该模块中添加相应的依赖,例如 MyBatis、数据库驱动等。
自动配置
- 在自定义 Starter 模块中创建自动配置类
- 比如 MyBatisAutoConfiguration
- 该类负责配置 MyBatis 相关的 Bean
- 如 SqlSessionFactory、MapperScannerConfigurer 等。
Starter 依赖管理
- 在该模块的 pom.xml 中配置对 MyBatis、数据库驱动等的依赖。
条件化配置
- 可以通过条件化配置,比如 @ConditionalOnClass(MyBatis.class)
- 控制在 MyBatis 类存在时才执行相应的配置(或者其它逻辑)。
编写配置文件
- 可以提供一个配置文件
- 例如 application.properties 或 application.yml,用于配置 MyBatis 的属性。
发布并引用
- 将该自定义 Starter 发布到 Maven 或其他仓库,以便其他项目可以引入。
- 在 Spring Boot 应用程序中,通过 Maven 或 Gradle 引入自定义 Starter,例如:
<dependency>
<groupId>com.example</groupId>
<artifactId>spring-boot-starter-mybatis</artifactId>
<version>1.0.0</version>
</dependency>
step 2.SpringBoot 启动
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
step 3.启用自动配置机制
@SpringBootApplication
是一个复合注解,如下
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
...
}
启动@EnableAutoConfiguration
开启自动配置机制
step 4.加载自动配置类
自动配置类在starter组件中被配置,如下
@Configuration
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
@ConditionalOnSingleCandidate(DataSource.class)
@EnableConfigurationProperties({MybatisPlusProperties.class})
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
public class MybatisPlusAutoConfiguration implements InitializingBean {
...
}
如何找到自动配置类的位置?
- SpringBoot约定在 Starter 组件的 META-INF/spring.factories 文件中定义
- 该文件列出了需要自动配置的类
- Spring Boot 在初始化时会根据这些类的定义进行自动配置。
配置类各个注解的作用
@Configuration
- 声明该类是一个配置类
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class})
SqlSessionFactory.class
和SqlSessionFactoryBean.class
是指定的类。- 应用程序运行时的类路径上包含这两个类中的任意一个或两个时,这个配置类才会生效。
- 如果这两个类不在类路径上(可能你的项目代码中没有引用,或者没有引入相关的依赖),那这个配置类就不会生效
@ConditionalOnSingleCandidate(DataSource.class)
- 表示只有存在一个类型为
DataSource
的Bean
的时候,这个配置类才会生效。 - 这个注解通常用于避免多个
DataSource Bean
被意外地自动装配进来。
@EnableConfigurationProperties({MybatisPlusProperties.class})
- 启用对指定配置类(这里是
MybatisPlusProperties
)的支持。 - 允许通过
application.properties
或application.yml
文件配置MybatisPlusProperties
中的属性。
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
- 表示该配置类在
DataSourceAutoConfiguration
之后自动配置 - 意味着这个配置类依赖于
DataSourceAutoConfiguration
并会在它配置完成后再配置。
至此starter组件一个宏观上的大概流程分析完毕
标签:装配,SpringBoot,Spring,配置,Boot,自动,原理,class,Starter From: https://blog.51cto.com/u_16079703/8147078