手写一个简易的spring之Ioc的实现
Spring核心功能
一、概念
控制反转(IoC,Inversion of Control),是一个概念,是一种思想。指
将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。通过容器实现对象的创建,属性赋值,依赖的管理。简单来说,这里的反转指的就是将原先new代码的权力交付给spring的容器去实现。
二、Spring中容器的获取
如上,我们先来看看ApplicationContext,ApplicationContext 是一个接口,
ApplicationContext 用于加载 Spring 的配置文件,在程序中充当“容
器”的角色。将配置文件的路径传给ClassPathXmlApplicationContext(常用实现类),读取配置文件,完成容器对象对象的初始化。
容器对象初始化时,一次性全部装配好所有的Bean,效率高,但占内存,哈哈哈哈哈哈,也算空间换时间吧。
当我们创建好一个容器对象之后,我们就可以从这个容器对象里面getBean方法去取数据了,如下
三
根据前面我们可以大致了解spring中Bean是如何操作的,接下来我将带大家去实现一个最基本的Bean的存和取。
定义:BeanDefinition,可能这是你在查阅 Spring 源码时经常看到的一个类,例如它会包括 singleton、prototype、BeanClassName 等。但目前我们初步实现会更加简单的处理,只定义一个 Object 类型用于存放对象。
此处的只用Object实际上是不妥的,后面会改成Class,通过反射newInstance创建对象。
注册:这个过程就相当于我们把数据存放到 HashMap 中,只不过现在 HashMap 存放的是定义了的 Bean 的对象信息。
获取:最后就是获取对象,Bean 的名字就是key,Spring 容器初始化好 Bean 以后,就可以直接获取了。
BeanDefinition