Spring源码系列

本文深入探讨Spring框架的核心特性,包括IOC(控制反转)和DI(依赖注入)的概念及其实现步骤,解析Spring的三级缓存如何解决循环依赖问题,并详细阐述了Spring MVC的九大组件及其执行流程。通过对这些关键概念的理解,有助于开发者更好地掌握Spring框架的使用。
摘要由CSDN通过智能技术生成

通俗易懂的讲IOC和DI

首先我们再看源码之前要清楚什么是IOC和DI,以及它的一些简单实现方法。

IOC我们可以理解为是一个共享充电桩(容器),里面存放着各种各样的充电宝,DI可以理解为给每个充电宝插上数据线(实例化)。

我们从拿到一个项目时,可以得到的信息有限,想要启动的时候讲类注入到IOC容器中,并通过DI将其实例化,可分解为以下几步。

  • 读取配置文件,从配置文件拿到项目路径。
  • 根据项目路径去找到打包的文件夹,扫描到其中的class文件,并将其初始化成特定的类。
  • 将带有@Controller、@Service、@Repository、@Component等注解的类放进IOC容器中(可以理解为一个Map)。
  • 将类中带有@Autowired等注解的属性进行依赖注入。
		// 1.加载配置文件
        this.doLoadConfig("application.properties");

        // 2.扫描相关的类
        this.doScanner(contextConfig.getProperty("scanPackage"));

        //------------------------IOC功能--------------------------------
        // 3.初始化IOC容器,将扫描到的类进行实例化,并且缓存到IOC容器中
        this.doInstance();

        //-------------------------DI功能------------------------------------
        // 4.完成依赖注入,实现初始化
        this.doAutowired();

Spring中的概念

Map :一个IOC容器
BeanFactory:顶层接口,也是创造Bean的一个工厂。
BeanDefinitionReader:解析器,用来解析所有配置文件。
BeanDefinition:原信息、配置,包括xml、yml、properties、annotation等。
Bean:Bean实例,通过反射获取的实例化Object对象,包括原生的Bean和代理的Bean。
BeanWrapper:包装器,将Bean缓存到IOC容器中,持有了Bean的引用。
ApplicationContext:上下文,持有了BeanFactory的引用,对用户开放,是一种门面模式。

通过下图可以更好的理解它们之间的关系
在这里插入图片描述

三级缓存解决循环依赖问题

在Bean的依赖注入的过程中存在着循环依赖的问题,此时是采用的三级缓存的方式来解决的。
一级缓存:存的是所有的成熟Bean。
二级缓存:存的是纯净的早期Bean。
三级缓存,存的是代理的Bean。

MVC的九大组件

SpringMVC的本质就是在DispatcherServlet中进行init九大组件,九大组件如下图,在initStrategies方法中对这九大组件进行初始化。
在这里插入图片描述

MVC执行过程

其中最核心的,也是从一个请求的发送到返回的主要组件是以上组件,执行过程如图。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值