码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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+首字母大写属性名

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

     

     

    运行一下

     

     

  • 相关阅读:
    果粉崩溃!Icloud又要涨价?我来教你使用群晖生态将本地SSD“上云“!
    SpringCloud微服务实战——搭建企业级开发框架(四十五):【微服务监控告警实现方式二】使用Actuator(Micrometer)+Prometheus+Grafana实现完整的微服务监控
    Ubuntu如何创建一个子用户并赋与管理员权限
    基于布谷鸟灰狼算法、灰狼算法求解复杂地形下三维无人机路径规划问题研究附matlab代码
    实时渲染器不止lumion,Chaos Vantage你值得一试
    在vue的v-for中,key为什么不能用index?
    KNN实现鸢尾花分类
    springcloud相关面试题
    算法----字符串中的最大奇数
    1410:最大质因子序列
  • 原文地址:https://blog.csdn.net/lonelyneet/article/details/125872535
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号