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

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

     

     

    运行一下

     

     

  • 相关阅读:
    osg实现鼠标框选
    80W美团架构师轻量级框架SSM整合开发实战文档
    java版工程管理系统Spring Cloud+Spring Boot+Mybatis实现工程管理系统源码
    Redis学习笔记整理_01
    使用POI生成Excel下拉框
    Electron安装问题
    23种设计模式之代理模式(动态代理)
    3D抓取算法的网络结构原理及作用
    【分享】集简云浏览器机器人使用场景详细操作步骤
    HIVE基本查询操作(二)——第1关:Hive排序
  • 原文地址:https://blog.csdn.net/lonelyneet/article/details/125872535