工作的前面三年,虽然一直在使用Spring,但对它却不甚了解,内心充满无数的疑问:为什么配置xml中bean就可以使用它?我的对象具体存在于哪里?为什么我的对象是单例模式?
每逢遇到面试问Spring的核心原理,都是死记硬背的标准答案。为了更清晰的了解它,我去看过几次Spring基本概念的介绍,但仍然是一头雾水,不知所云。因为这些介绍都是专业术语表达,具有简洁、抽象性,而我们在刚接触时是无法理解的,只有具象化的描述和实践才能真正的让我们去理解。
随着工作时间的增长,学习的知识更多,现在回过头去会看当时不了解的东西,发现其核心原理竟然是如此的简单明了。我将把我的理解过程整理出来以供大家参考。
设计
我们先不去管IOC,DI, AOP等概念,就先从最简单的理解:容器(也有叫Spring容器、bean容器或IOC容器)
容器就是我们生活中用于盛东西的物体,比如:盆,桶,罐等。在程序世界中对其抽象,但他的主要作用仍然是存储。
所以你知道了吧?Bean容器的作用是存储我们的对象并管理对象的整个生命周期。
但是我们第一步要完成的是容器存储/获取我们的对象,管理对象的整个生命周期就后文慢慢道来。
所以我们进行如下设计:
我们要做的就是做一个容器,提供注册(存储)和获取功能。
1、找一个数据结构来存储对象。
我们需要选择一种数据结构来存储对象,而且需要通过对象的名称来查询出相应的对象,此时我们发现HashMap是最为合适的,而且HashMap无论是读取还是存入效率都是不错的。
2、提供注册和获取两个方法。
定义两个方法用于将对象存入上面的Map中和从Map中读取出来。
实现
源码
对,你没看错,Spring容器的实现用这一个类就实现了,我相信这么简单的开始所有人都懂吧。
测试
定义被管理类
测试用例
如果这里看源码不方便,可以去Github看下:https://github.com/flyhero
公众号:码上实战