说明:本节开发一个 极简的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+首字母大写属性名
如何通过方法名来完成调用呢?
运行一下