Spring Boot 启动原理与自动配置类加载原理详解

Spring Boot 启动原理与自动配置类加载原理详解

    • [1.Spring Boot 启动原理与自动配置类加载原理详解](#1.Spring Boot 启动原理与自动配置类加载原理详解)
    • [2. Spring Boot 启动原理](#2. Spring Boot 启动原理)
      • [2.1 创建主类](#2.1 创建主类)
      • [2.2 初始化 SpringApplication](#2.2 初始化 SpringApplication)
      • [2.3 创建 ApplicationContext](#2.3 创建 ApplicationContext)
      • [2.4 扫描组件](#2.4 扫描组件)
      • [2.5 自动配置](#2.5 自动配置)
    • [3. 自动配置类加载原理](#3. 自动配置类加载原理)
      • [3.1 条件注解](#3.1 条件注解)
      • [3.2 自动配置类](#3.2 自动配置类)
      • [3.3 条件匹配](#3.3 条件匹配)
      • [3.4 覆盖和扩展](#3.4 覆盖和扩展)
      • [3.5 示例](#3.5 示例)

1.Spring Boot 启动原理与自动配置类加载原理详解

Spring Boot 是一个基于 Spring Framework 的框架,旨在简化新 Spring 应用程序的初始设置和开发过程。它通过自动配置和默认约定来减少样板代码,使得开发者能够更快地构建应用程序。

2. Spring Boot 启动原理

Spring Boot 应用程序的启动流程主要包括以下几个步骤:

2.1 创建主类

Spring Boot 应用程序的入口通常是一个带有 @SpringBootApplication 注解的主类。这个注解是 @Configuration@EnableAutoConfiguration@ComponentScan 的组合。

java 复制代码
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

2.2 初始化 SpringApplication

SpringApplication.run() 方法是 Spring Boot 应用启动的核心方法。它执行了一系列初始化操作,包括:

  • 创建 ApplicationContext
  • 加载配置文件。
  • 初始化事件监听器。
  • 注册 Bean。

2.3 创建 ApplicationContext

SpringApplication 会创建一个 ApplicationContext 实例,通常是 AnnotationConfigApplicationContextConfigurableApplicationContext。在这个上下文中包含了所有的 Bean 定义。

2.4 扫描组件

通过 @ComponentScan 注解指定的包路径扫描组件,如 @Service@Repository@Controller 等注解标注的类。

2.5 自动配置

根据类路径上的依赖和配置文件,Spring Boot 会自动配置很多默认的 Bean。

3. 自动配置类加载原理

Spring Boot 的自动配置类加载机制是其强大功能的核心之一。以下是自动配置类加载的基本步骤:

3.1 条件注解

Spring Boot 使用了一系列条件注解来控制自动配置类是否生效。这些注解包括但不限于:

  • @ConditionalOnClass: 如果类路径上存在某个类,则配置生效。
  • @ConditionalOnMissingBean: 如果没有找到某个类型的 Bean,则配置生效。
  • @ConditionalOnProperty: 如果配置文件中存在某个属性,则配置生效。

3.2 自动配置类

每个自动配置类都代表了一组默认的配置选项,这些类通常以 AutoConfigure 结尾(例如 DataSourceAutoConfiguration)。这些类中定义了各种 @Bean 方法,用于注册特定的 Bean 到 Spring 容器中。

3.3 条件匹配

当 Spring 容器启动时,会扫描所有 @Configuration 类,包括自动配置类。通过条件注解判断是否满足特定条件,如果满足则加载相应的 Bean。

3.4 覆盖和扩展

用户可以通过提供自己的配置类或者通过配置文件来覆盖和扩展默认的自动配置行为。

3.5 示例

假设我们有一个 Spring Boot 应用程序,其中包含了一个自动配置类 MyAutoConfiguration

java 复制代码
@Configuration
@ConditionalOnClass(MyService.class)
public class MyAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

在这个例子中,MyAutoConfiguration 类只有在类路径中存在 MyService 类时才会被激活,并且只有当容器中不存在 MyService Bean 时才会创建一个新的实例。

相关推荐
激流丶7 分钟前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
Themberfue10 分钟前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
时差95325 分钟前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式27 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
晨曦_子画33 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
秋意钟1 小时前
MySQL日期类型选择建议
数据库·mysql
南宫生1 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
Heavydrink1 小时前
HTTP动词与状态码
java
ktkiko111 小时前
Java中的远程方法调用——RPC详解
java·开发语言·rpc
计算机-秋大田2 小时前
基于Spring Boot的船舶监造系统的设计与实现,LW+源码+讲解
java·论文阅读·spring boot·后端·vue