4-5 实现极简IoC容器

说明:本节开发一个 极简的ioc容器让大家理解springioc容器背后的故事

创建工程

 

创建类

 

 创建配置文件

 这个文件是如何在运行时创建对象的呢?我们需要自己实现ioc容器

创建接口

 

 模拟spring的applicationContext接口

 getBean是从ioc容器中将对应的Bean进行提取

 这个类就是实现接口并完成ioc容器的创建过程

 创建一个hashMap作为一个ioc容器,之后的工作就是在实例化classPathXmlApplicationContext对象过程中去加载处理xml配置文件了

创建默认构造方法,去读取刚才编写的xml文件

 通过getPath得到文件的路径

如果包含中文可能会找不到,进行解码

 获取到路径后如何进行解析呢?

引入组件

 

 回到代码,利用方法读取解析把xml放到document中

 后面的工作就是按照xml的格式依次读取

 将当前根节点下所有bean标签进行获取

利用for循环遍历集合,在遍历过程中每一个elements都包含了两个属性一个id一个class,我们需要读取出来

 使用反射技术forName方法加载className得到与之对应的类对象,调用newInstance调用默认构造方法创建apple类的实例

 至此apple这个对象就已经被创建好了

利用

 这样就相当于ioc容器对刚才新创建的对象赋予了beanId进行管理,到此作为ioc容器创建对象的职责就完成了

 

对指定的beanId提取并进行返回

 

 测试一下

 完成ioc容器的初始化工作,与此同时ioc容器中便会创造出一个beanId为sweetApple的apple对象

 如何验证呢,打印出ioc容器中的对象

可以在应用入口获取新创建的对象

 

 

 从使用的角度来说,和我们利用SpringIoc容器进行代码初始化的过程是几乎一样的

还需要在ioc容器中继续通过set方法进行属性注入

 在这个properties集合中其实就包括了

 这三个属性

利用for循环进行遍历,强制类型转换,提取属性

 获取到以后如何在运行时动态注入呢?

基于property完成数据注入是通过set方法来完成的

而set方法命名的格式为set+首字母大写属性名

如何通过方法名来完成调用呢?

 

 

运行一下

 

猜你喜欢

转载自blog.csdn.net/lonelyneet/article/details/125872535
4-5
今日推荐