首页 > 其他分享 >Spring 启动流程概述

Spring 启动流程概述

时间:2025-01-11 21:31:46浏览次数:3  
标签:容器 Spring 流程 Component public Bean 概述 class

Spring 的启动流程是理解其核心原理的重要部分。以下是 Spring 启动的主要流程及原理的详细介绍,并配合代码样例和分析说明。


Spring 启动流程概述

Spring 的启动流程分为以下几个步骤:

  1. 创建 Spring 容器
    • 初始化 ApplicationContext,加载配置类或配置文件。
    • 通过反射扫描和注册 Spring Bean。
  2. 解析配置和注解
    • 加载 @Configuration 类或 XML 文件。
    • 解析注解如 @Component, @Bean, @Autowired
  3. BeanFactory 初始化
    • 创建 BeanFactory 对象,用于管理 Bean 的生命周期。
    • 注册 Bean 的定义信息。
  4. Bean 的实例化
    • 根据依赖关系注入 (DI)。
    • 调用构造函数、设置属性。
  5. Bean 初始化
    • 调用 @PostConstructInitializingBeaninit-method
  6. 容器启动完成
    • 启动完成后可以使用 Spring 容器中的 Bean。

核心步骤解析

以下是关键流程的详细说明及代码示例:

1. 启动 ApplicationContext

Spring 启动的入口通常是通过 ApplicationContext 接口,比如 AnnotationConfigApplicationContext

示例代码:

@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
    // 配置类,用于扫描组件
}

public class Main {
    public static void main(String[] args) {
        // 启动 Spring 容器
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        
        // 获取 Bean
        MyService myService = context.getBean(MyService.class);
        myService.doSomething();
        
        context.close(); // 关闭容器
    }
}

流程分析:

  • AnnotationConfigApplicationContext 是一个实现了 ApplicationContext 的类。
  • 它会扫描 @ComponentScan 注解指定的包,找到所有的 Spring 组件。

2. 扫描和解析注解

Spring 会扫描配置类,解析 @Component, @Bean 等注解,并注册 Bean。

示例代码:

@Component
public class MyService {
    public void doSomething() {
        System.out.println("MyService is working!");
    }
}

@Component
public class MyRepository {
    // 数据访问逻辑
}

原理:

  • Spring 使用 类路径扫描反射 来加载注解的类。
  • @ComponentScan 的实现依赖于 ClasspathScanningCandidateComponentProvider,它会扫描所有类并找出符合条件的类。

3. BeanFactory 初始化

BeanFactory 是 Spring 容器的核心,负责 Bean 的创建和管理。

关键方法:

  • DefaultListableBeanFactory 是 BeanFactory 的默认实现。
  • BeanDefinition 用于描述 Bean 的定义(如类名、作用域、依赖等)。

4. Bean 的生命周期

Spring Bean 生命周期包括以下几个阶段:

  1. 实例化:创建 Bean 对象。
  2. 属性注入:根据依赖关系注入属性。
  3. 初始化:调用初始化方法,如 @PostConstruct
  4. 销毁:容器关闭时调用销毁方法。

示例代码:

@Component
public class MyBean {
    
    @PostConstruct
    public void init() {
        System.out.println("Bean is initialized.");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("Bean is destroyed.");
    }
}

5. 事件发布与监听

Spring 容器启动后,可以发布和监听事件。

示例代码:

@Component
public class MyEventListener implements ApplicationListener<ContextRefreshedEvent> {
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        System.out.println("Context Refreshed Event received!");
    }
}

原理:

  • ApplicationEventPublisher 用于发布事件。
  • 监听器实现 ApplicationListener 接口。

总结流程

  1. 创建 ApplicationContext:加载配置类。
  2. 扫描组件:解析 @Component, @Bean 等注解。
  3. 注册 Bean 定义:将 Bean 的元数据注册到 BeanFactory
  4. 创建和初始化 Bean:完成依赖注入。
  5. 容器启动完成:可以使用容器中的 Bean。

如果需要深入某个具体步骤的实现细节或有其他疑问,请随时告诉我!

标签:容器,Spring,流程,Component,public,Bean,概述,class
From: https://blog.csdn.net/weixin_45476869/article/details/145048676

相关文章

  • Life Long Learning(李宏毅)机器学习 2023 Spring HW14 (Boss Baseline)
    1.终身学习简介神经网络的典型应用场景是,我们有一个固定的数据集,在其上训练并获得模型参数,然后将模型应用于特定任务而无需进一步更改模型参数。然而,在许多实际工程应用中,常见的情况是系统可以不断地获取新数据,例如Web应用程序中的新用户数据或自动驾驶中的新驾驶数据。......
  • 2025毕设springboot 大学生志愿者信息管理系统论文+源码
    系统程序文件列表开题报告内容研究背景在当今社会,志愿服务已成为大学生参与社会实践、提升自我价值的重要途径。随着大学生志愿者队伍的不断壮大,如何高效、有序地管理这一庞大群体,成为摆在高校和社会组织面前的一大挑战。传统的志愿者管理方式往往依赖于纸质记录和人工调度......
  • 2025毕设springboot 大学生志愿者服务管理微信小程序的设计与实现论文+源码
    系统程序文件列表开题报告内容研究背景随着社会的不断进步和志愿服务精神的广泛传播,大学生作为社会的一股重要力量,积极参与各类志愿服务活动,不仅有助于个人成长,还能为社会带来积极影响。然而,传统的志愿者服务管理方式往往存在信息更新不及时、报名流程繁琐、志愿服务时长记......
  • springboot毕设 高校新生报道及宿舍分配平台 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高校招生规模的不断扩大,每年新生报道期间的各项管理工作变得日益复杂。传统的手工登记、分配宿舍等流程不仅效率低下,还容易出现信息错误和遗漏,给......
  • springboot毕设 基于O2O模式的外卖订餐系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和人们生活节奏的加快,O2O(OnlineToOffline)模式的外卖订餐系统逐渐成为人们日常生活中不可或缺的一部分。现代都市人的生活......
  • AI Agent工作流程
    最近老是听说AIAgent,仿佛是万能的智慧流水线,能直接提供结果(解决方案),而不是像LLM那样问一句答一句。比如说你扔一堆报表数据给它,它能给出业绩诊断和提升策略;你描述下产品思路,它直接开发好软件打包给你,比如现有的产品ChatDev。这就是AIAgent的神奇之处,当然它也是依赖大模型......
  • 可白嫖源码-Springboot+vue毕业论文管理系统(案例分析)
    摘 要随着Internet的发展,以网络为支撑的论文管理系统不但可以让学生随时随地提交论文,老师也可以通过电脑或者移动终端随时随地下载论文,对论文进行审核,有关单位部门的工作人员和导师也能随时获取相关信息进行毕业生论文的管理工作,相较于传统手工方式管理毕业生的论文,这种方式......
  • 可白嫖源码-springboot校园送餐系统(案例分析)
    摘 要随着互联网的飞速发展,网上消费逐渐演变为一种趋势,成为现代商业越来越受欢迎的消费方式。为了提高校园餐饮行业的整体效率和服务水平,给同学们提供更方便快捷的餐饮服务,校园送餐系统随之产生。通过对同学们的用餐方式和用餐时间的全面考察分析,结合软件行业先进的开发技......
  • 可白嫖源码-springboot在线英语学习系统(案例分析)
    摘 要随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络的发达,在线英语学习系统的资讯信息通过网络进行信息管理掀起了热潮,所以针对在线英语......
  • Springboot超市收银系统884ku
    Springboot超市收银系统884ku本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:员工,商品信息,商品入库,会员信息,营业信息开题报告内容Springboot超市收银系统884ku开题报告一、研究背景随着社......