1.动手写简版spring之IOC初创篇

死磕Spring之IoC篇 - 深入了解Spring IoC(面试题) 目录 1. 什么是 Spring Framework ? 2. Spring Framework 的优势和不足? 3. 你对 IoC 的理解? 4. 为什么需要 IoC ? 5. IoC 和 DI 的区别? 6. IoC 容器的职责? 7. 什么是 Spring IoC 容器? 8. 构造器注入和 Setter 注入 9. BeanFactory 和 ApplicationContext 谁才是 Spring IoC 容器? 10. Spring Bean 的生命周期? 11. Bea 阅读详情

0、目标

xml配置类的id和class
自己写一个ClassPathXmlApplicationContext 类,作为容器,能够读取、解析、创建、获取对象。

1、核心原理

ClassPathXmlApplicationContext 是主要实现类,它持有 类的定义登记册、以及 类初始化后对象的Map。

    private List<BeanDefinition> beanDefinitions = new ArrayList<>();
    private Map<String,Object> singletons = new HashMap<>();

当需要获取对象时,从Map中获取即可

    public Object getBean(String beanName){
        return singletons.get(beanName);
    }

其中,BeanDefiniton是类的配置,核心为id和className。实际上就是对xml配置文件的封装。

public class BeanDefinition {
    private String id,className;

    public BeanDefinition(String id, String className) {
        this.id = id;
        this.className = className;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }
}

2、实现步骤

创建xml文件,描述类名和路径

<?xml version="1.0" encoding="UTF-8" ?>
<beans>
    <bean id = "superman" class = "com.geek.minis.ioc01.Geek"></bean>
</beans>

解析xml

    public void readXml(String fileName){
        SAXReader saxReader = new SAXReader();
        URL resource = this.getClass().getClassLoader().getResource(fileName);
        Document document = null;
        try {
            document = saxReader.read(resource);
            Element rootElement = document.getRootElement();
            List<Element> elements = rootElement.elements();
            for (Element element:elements){
                String id = element.attributeValue("id");
                String aClass = element.attributeValue("class");
                BeanDefinition definition = new BeanDefinition(id,aClass);
                beanDefinitions.add(definition);
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }

根据解析去创建对象

private void initBeans(){
        for(BeanDefinition beanDefinition: beanDefinitions){
            try{
                singletons.put(beanDefinition.getId(),Class.forName(beanDefinition.getClassName()).newInstance());
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }

组装!初始化时就干完所有的事。


    public ClassPathXmlApplicationContext(String xmlFileName) {
        this.readXml(xmlFileName);
        this.initBeans();
    }

3、测试代码

public class Main {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("beans.xml");
        SuperMan man = (SuperMan) classPathXmlApplicationContext.getBean("superman");
        man.bang();
    }
}

测试结果
在这里插入图片描述

结语

本专栏做一个简版的spring ,通过动手实践进一步理解ioc、aop、mvc、jdbcTemplate登。
项目代码分享在 https://github.com/forestnlp/minispring

搞透 IOC,Spring IOC 看这篇就够了! IOC 与 AOP 属于 Spring 的核心内容,如果想掌握好 Spring 你肯定需要对 IOC 有足够的了解 @mikechen 阅读详情

相关推荐

全网最全的AItium Designer 16下载资源与安装步骤

Altium Designer 除了全面继承包括Protel 99SE、Protel DXP在内的先前一系列版本的功能和优点外,还增加了许多改进和很多高端功能。该平台拓宽了板级设计的传统界面,全面集成了FPGA设计功能和SOPC设计实现功能,从而允许工程设计人员能将系统设计中的FPGA与PCB设计及嵌入式设计集成在一起。...

WQ的博客 1万+

2.动手写简版spring之IOC解耦篇

封装基础配置信息……这么一来,代码清晰了吗。感觉类变多好多。但是没有关系,就像很多创业公司会演化很多机构一样,ioc要发展 还是要演化出更多的机构,各负其责。下一篇 3.动手写简版spring之IOC构造函数篇本专栏做一个简版的spring ,通过动手实践进一步理解ioc、aop、mvc、jdbcTemplate登。项目代码分享在。

EndlessProcess的专栏 385

解密携程风控:user-dun算法中的自定义base64与多模式加密机制剖析

本文深入剖析了携程旅行APP风控核心组件libduncode.so中的user-dun算法。文章重点解密了其采用的自定义Base64编码机制与多模式加密选择逻辑,并详细阐述了如何通过动态分析与静态还原,理解算法与设备指纹的深度绑定关系,为逆向分析类似混淆加固的风控算法提供了系统的方法论。

weixin_29323049的博客 340

Spring-IoC 篇

在 Spring IoC 容器中,每个被管理的对象都由一个 Bean 定义来描述。Bean 定义包括对象的类型、依赖关系、生命周期等信息。

小周不想写代码的博客 2657

波束管理 Beam Management

Beam Management in 5G NR   波束管理,是5G NR中基于信道质量来动态选择每个UE和gNB之间以什么方向和频率的波束beam来进行通信。   背景   5G NR(New Radio)支持非常高的数据速率和更低的延迟。5G NR支持FR1和FR2频段,FR1为亚6 GHz(450至6000 MHz);FR2为毫米波段(24.25 GHz至52.6 GHz)。   由于毫米波频带使用非常高的频率,因此会导致传播损耗和其他损耗。为了补偿损失,在这种频率下定向通信是必不可少的。

最忆是江南的博客 5826

永磁同步电机矢量控制——电流内环前馈解耦策略

在采用永磁同步电机矢量控制时,ud和uq的指令值存在耦合项。需要对其进行解耦,目前,常用的解耦设计方法有前馈解耦、偏差解耦以及内模控制,本文主要分享电流内环前馈解耦控制策略。

a12312341ll的博客 8692

《Java 100 天进阶之路》第73篇:Spring IoC容器(2026版)

Spring全家桶专题开篇之作!IoC(控制反转)是Spring最核心的基石——将对象的创建和依赖管理从代码转移到容器。一文掌握IoC与DI的关系(思想 vs 实现)、BeanFactory vs ApplicationContext(懒加载 vs 预加载)、Bean生命周期五阶段(实例化→属性填充→初始化→使用→销毁)、三种配置方式(XML/注解/Java配置)。附完整代码示例、避坑清单、面试高频考点与追问陷阱。理解了IoC容器,就理解了Spring的"心脏"!

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 8254

半导体设备微振动控制:天棚阻尼PID与SIMULINK建模实战

半导体制造设备对微振动的敏感度已进入纳米级,光刻机、量测设备等一旦遭遇超过VC-C振动准则的扰动,便会出现套刻误差或检测误判。主动隔振技术通过传感器、控制器与执行器形成闭环,能有效抑制低频共振,其中天棚阻尼控制因物理概念清晰、鲁棒性强而成为工程首选。结合MATLAB/SIMULINK建模,可在设计阶段完成系统性能边界评估与参数整定,再通过C代码生成与FMU导出实现算法向控制器和跨平台仿真迁移。本文从VC-C指标拆解出发,依次讲解天棚阻尼PID控制原理、两自由度被控对象建模、控制增益估算、仿真验证方法,并给出

weixin_29169505的博客 326

自己动手写Spring-1-简单的IOC实现

该文是对Spring Framework中最核心的IOC简单实现。也是系列文章的开山之作。 IOC(Inversion of control,控制反转),是面向对象编程中的一种设计原则。但IOC说起来比较抽象,容易让人疑惑—“哪些方面的控制被反转了?”。Martin Fowler总结出是依赖对象的获得被反转了,因为大多数应用程序都是由两个或是更多的类通过彼此的合作来实现企业逻辑,这使得每个对象都需要获取与其合作的对象(也就是它所依赖的对象)的引用。如果这个获取过程要靠自身实现,那么这将导致代码高度耦合并且难

weixin_44228952的博客 738

芒果YOLO11改进23:主干Backbone篇GhostNet:原创改进高效 GhostNet 网络,华为出品,打造全新检测器

主干Backbone篇GhostNet:原创改进高效 GhostNet 网络,华为出品,打造全新检测器

包括YOLOv5、YOLOv7、YOLOv8等模型改进 405

GraphRAG深度解析:架构设计与实战案例

生成模块结合检索到的图数据和用户输入的查询,生成高质量的文本输出。通过结合图数据库中的知识,模型可以更准确地回答用户的问题,提供更优质的客户服务。通过分析用户的行为和偏好,结合图数据库中的知识,模型可以为用户提供个性化的推荐。:通过图数据库存储和检索结构化的知识,为语言模型提供丰富的背景信息,提升生成内容的质量和准确性。:选择合适的图数据库,如Neo4j、OrientDB等,以支持高效的图数据存储和检索。:利用图数据库的高效检索能力,快速找到与用户查询最相关的图元素,提高系统的响应速度。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1593

Spring之IoC容器篇

Spring是一个开源的应用程序开发框架,它由Rod Johnson创建,主要用于构建企业级Java应用程序。它提供了一个全面的编程和配置模型,可以简化Java开发过程,提高开发效率和可维护性。即为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。目的:解决企业应用开发的复杂性功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能范围:任何Java应用简单来说,

kissship的博客 1864

MacBook 长期挂机 OpenClaw:电池保护 + 防休眠设置

本文介绍了MacBook长期挂机运行OpenClaw时的电池保护和防休眠设置方案。主要内容包括:1)电池保护策略,通过电源连接、充电限制和定期充放电维护电池健康;2)防休眠设置,禁用系统休眠、自动休眠和屏幕休眠;3)OpenClaw的Docker部署方法。文章提供了详细的命令行脚本和配置说明,帮助用户实现MacBook的长期稳定运行,同时保护电池寿命。

一键难忘的博客 1695

模拟spring - 动手写一个spring IOC

一、前言 IOC (Inverse of control) - 控制反转,spring的IOC实现原理为利用Java的反射机制并充当工厂的角色完成对象的装配和注入。 二、实现细节 附上一张类的结构图,该例子需要导入jdom.jar和junit.jar ① 用户Bean package com.zdp.model; // 用户类 public clas...

凤凰涅槃 325

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

自己写一个简单的Spring IOC容器

为了能更好的理解SpirngIOC是如何工作的,在查阅网上的资料后,自己写了一个非常简单的SpringIOC容器,使用setter方法将值注入。 本例子需要用到jdom的包:http://pan.baidu.com/s/1hsmgsfi 以下是包结构 A和B接口的定义就不不写类,很简单。 BeanFactory接口只有一个方法,根据id返回对应的bean: package d

1866

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

自己动手实现的 Spring IOC 和 AOP - 上篇

1. 背景 我在大四实习的时候开始接触 J2EE 方面的开发工作,也是在同时期接触并学习 Spring 框架,到现在也有快有两年的时间了。不过之前没有仿写过 Spring IOC 和 AOP,只是宏观上对 Spring IOC 和 AOP 原理有一定的认识。所以为了更进一步理解 Spring IOC 和 AOP 原理。在工作之余,参考了一些资料和代码,动手实现了一个简单的 IOC 和...

windyaoyoung的博客 255

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring基础1——Spring(配置开发版),IOC和DI

spring介绍、入门案例、控制反转IOC、IOC容器、Bean、依赖注入DI

种一棵树最好的时间是十年前,其次是现在 4038

Spring源码手写篇-手写IoC

根据上面的接收我们就清楚了Bean定义的意义了。那么我们来定义Bean定义的模型要考虑几个问题。作用肯定是告诉Bean工厂应该如何来创建某类的Bean实例。

埃泽漫笔 1090

简单仿写Spring IOC

导语:由于本人是某大学网络中心java组组长,在和学弟学妹们传授完spring的相关知识之后,看到一脸茫然的他们,仿佛看到自己大一的时候,所以为了帮助学弟学妹更好的了解IOC 以及 AOP 两大原理,并且帮助自己更加深层次的学习spring,决定自己简单的仿写这两个功能。这篇是IOC,下一篇是AOP。 源码已在github开源:Github地址 一 :实现简单的IOC 回顾做过的项目,记得spring一个比较基础并且重要的功能就是读取xml文件,并且将的得到数据装配成bean,并且方法IOC容器当中储存.

weixin_43289848的博客 286

spring篇1-spring的ioc

spring的核心技术:ioc,aop,能实现模块之间、类之间的解耦合。 依赖:class a 中使用了class b的属性或者方法,则称class a依赖class b。 1.ioc(Inversion of control):控制反转 使用ioc的目的是减少对代码的改动,实现不同的功能,即解耦合。 ...

qq_51476492的博客 1230

面试Spring篇-Spring IoC 的加载过程

本文围绕 Spring IoC 加载过程展开,先阐述了 IoC(控制反转)的核心概念,即对象创建和依赖管理的控制权由应用程序反转给 Spring 容器,依赖注入(DI)是其主要实现方式,能降低对象耦合度。​ 接着介绍了 Spring IoC 的两大核心接口:BeanFactory和ApplicationContext,重点说明了两者在加载策略、功能和适用场景上的区别,BeanFactory为懒加载,提供基础 IoC 功能;ApplicationContext为饿汉式加载,功能更丰富,适用于多数企业级应用。

2301_79518809的博客 1108

python ioc框架_自己动手写Spring框架--IOC、MVC

对于一名Java开发人员,我相信没有人不知道Spring 框架,而且也能够轻松就说出 Spring 的特性--IOC、MVC、AOP、ORM(batis)。看那么多 Spring 源码分析,不如自己动手写 个轻量的 Spring 框架。下面我想简单介绍一下我写的轻量级的 Spring 框架(swift-framework),并且进行核心逻辑的分析,和使用说明。提示:以下有大量图片,可以在新页面...

weixin_39639040的博客 228

自己动手模拟spring的IOC

我们这里是模拟spring,主要模拟spring中的IOC功能,所以在此我们一样要在service层中定义dao的实例,当然不用new出来,我们就通过spring的IOC把这里的dao层注入进来。不要忘了对dao提供set。Get方法,因为IOC的底层其实就是利用反射机制实现的,他把dao注入进来,其实底层就是通过反射set进来的。 首先我们把我们用的dao、service、entity定义出来:...

HybridTheory_的博客 227

自己动手实现的 Spring IOC 和 AOP - 下篇

1. 背景 本文承接上文,来继续说说 IOC 和 AOP 的仿写。在上文中,我实现了一个很简单的 IOC 和 AOP 容器。上文实现的 IOC 和 AOP 功能很单一,且 IOC 和 AOP 两个模块没有整合到一起。IOC 在加载 bean 过程中,AOP 不能对 bean 织入通知。在本文中,我们详细说一下升级版 IOC 和 AOP。这个版本的实现包含了在上篇中所说的功能,这里再重述...

windyaoyoung的博客 129

【项目推荐】基于 SpringBoot3 + Spring AI 的游泳馆管理系统:Agent + RAG + Function Calling 一次学全

它不是玩具 Demo,而是一个「业务 + AI」双主线交织的真实系统——预约业务在跑,AI 客服在旁边实时查库作答,两条线通过 Function Calling、RAG、站内消息串成一体。面试官问「你做过什么 AI 项目」时,你能从业务场景讲到架构取舍,从 RAG 切分参数讲到降级兜底——这和「我调了一下 ChatGPT 的 API」是完全不同的两个段位。项目已包含完整的建表 SQL、初始化数据、部署文档,克隆下来就能跑。获取方式:见文末说明 / 后台回复关键词获取。—— 完 ——

深耕开发,专注编程实战。分享源码解析、项目搭建、问题排查笔记,沉淀技术,持续更新。 347
上一篇: SpringSecurity简单入门
下一篇: 2.动手写简版spring之IOC解耦篇
悟空学编程
博客等级 码龄12年 32粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟空学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值