• 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+首字母大写属性名

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

     

     

    运行一下

     

     

  • 相关阅读:
    【数据结构】插入排序:直接插入排序、折半插入排序、希尔排序的学习知识总结
    函数指针一站式理解(C++ primer plus),包括指针数组,数组指针,胆小慎入
    docker安装jenkins以及Permission denied错误的解决方法!
    Go-函数作为参数传递
    ad转换的学习
    Faster R-CNN详解
    PMP项目整合管理
    通讯网关软件021——利用CommGate X2OPC实现OPC客户端访问Modbus设备
    深入理解Kafka核心设计与实战原理 笔记
    对Python3.8配置OpenCV4.5.5中
  • 原文地址:https://blog.csdn.net/lonelyneet/article/details/125872535