简单实现spring 基于XML配置的IOC ,内附github源码地址

博主分享了尝试手写简易版Spring框架的经历,重点介绍了基于XML配置的IOC实现,包括BeanFactory、XmlBeanDefinitionReader等核心类的作用及其实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个星期之前闲着想自己手写一个简单的spring,才发现是多么的不容易,在网上找了不少资料,也厚着脸皮问了不少大佬,还是非常不容易的写了一个简单的SpringIOC基于XML配置.

贴上自己简单实现spring的架构图

在这里插入图片描述

项目结构如下,由于现在还没做完基于注解的IOC,有些类到时候可能还需要多更改一下。

在这里插入图片描述

我们都知道基于xml配置的ioc是利用了java的反射+工厂模式+配置文件。Spring在运行时,根据Spring的xml配置文件来动态的创建对象,和调用对象里的方法,控制权由对象本身转向容器。由容器根据配置文件去创建实例并创建各个实例之间的依赖关系 。但是看了spring源码才发现他的精妙之处。spring的5.x源码很难懂,还是自己内功修炼的不够好,自己参考了3.x和4.x的,学到了很多东西,也深深体会到了设计模式的用处,真的太优雅了。简单介绍下几个类:

BeanFactory

在这里插入图片描述

是一个获取bean工厂的接口,DeafaultBeanFactory为BeanFactory的默认实现。

XmlBeanDefinitionReader

在这里插入图片描述
专门负责用来读取xml配置文件


BeanDefinitionRegistry

在这里插入图片描述
读取完配置文件后,BeanDefinitionRegistry负责注册bean,DefaultSingletonBeanRegistry为默认实现


当然还有很关键的BeanDefinition

在这里插入图片描述
这个接口十分关键,是存储每一个bean的属性定义,比如说该bean是否为单例、多例,是否有构造参数,是否依赖其他bean,GenericBeanDefinition为默认实现


以上就是我个人认为生产一个bean的比较核心的几个类把,spring把生产一个bean分为大概三个步骤,读取xml,注册bean,存到一个Map中。但是spring把这些步骤都分到不同的类和接口中,完美的实现了面向对象五个基本原则(SOLID)之单一职责原则(SRP)。

ApplicationContext

在这里插入图片描述
ApplicationContext是BeanFactory的子接口。他们都可代表Spring容器,Spring容器是生成Bean实例的工厂,并且管理容器中的Bean。ApplicationContext是高级容器,比beanFactory扩展了更多的功能,比如说国际化,访问资源,如URL和文件,消息发送、响应机制,AOP。beanFactory是懒加载bean,等用户getBean的时候才会去注册相关bean,但是applicationContext是容器初始化的时候就已经注册好所有的bean,并放到容器中存储着,我这里就实现了访问资源ResourceLoader,其他的有兴趣的道友可以自己去实现。


目前已经实现了简单的xml配置的ioc,分别是set属性注入与构造器注入,源码里难懂的都有相关注释,这里就不写了,由于生活的各种忙活,5月底写的博客到今天才发现还没有写完,spring的ioc就实现到这里,以后有空会继续完善。欢迎各位大佬帮忙完善之后的功能与提及不足之处。
github地址 : https://github.com/Yipsoul/spring_no_easy
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值