Spring入门之一-------实现一个简单的IoC

一、场景模拟

public interface Human {public void goHome();}
Human:人类,下班了该回家啦
public interface Car {void start();void stop();void turnLeft();void turnRight();}
Car:汽车,可以启动、停止、左转、右转
public class AudiCar implements Car{public void start() {System.out.println(this.getClass().getSimpleName() + ": start !!!");}public void stop() {System.out.println(this.getClass().getSimpleName() + ": stop !!!");}public void turnLeft() {System.out.println(this.getClass().getSimpleName() + ": turnLeft !!!");}public void turnRight() {System.out.println(this.getClass().getSimpleName() + ": turnRight !!!");}
}
AudiCar:奥迪汽车,实现Car
public class BuickCar implements Car{public void start() {System.out.println(this.getClass().getSimpleName() + ": start !!!");}public void stop() {System.out.println(this.getClass().getSimpleName() + ": stop !!!");}public void turnLeft() {System.out.println(this.getClass().getSimpleName() + ": turnLeft !!!");}public void turnRight() {System.out.println(this.getClass().getSimpleName() + ": turnRight !!!");}
}
BuickCar:别克汽车,实现Car
public abstract class HumenWithCar implements Human{protected final Car car;public HumenWithCar(Car car) {this.car = car;}public abstract void goHome();}
HumenWithCar有车一族,实现Human,拥有Car属性
public class Zhang3Human extends HumenWithCar{public Zhang3Human(Car car) {super(car);}public void goHome() {car.start();car.turnLeft();car.stop();}
}
Zhang3Human:张三,有车一族
public class Li4Human extends HumenWithCar{public Li4Human(Car car) {super(car);}public void goHome() {car.start();car.turnRight();car.stop();}
}
Li4Human:李四,有车一族

二、定义IoC容器

public class IocContrainner {/*** 用来存储beans,String为bean的id,Object为bean本身*/private final Map<String, Object> beans = new HashMap<String, Object>();/*** 根据beanId获取一个bean* @param beanId beanId* @return 返回bean*/public Object getBean(String beanId) {return beans.get(beanId);}/*** 委托IoC容器创建一个bean* @param clazz 要创建的bean的class* @param beanId beanId* @param paramBeanIds 要创建的bean的class的构造方法所依赖的bean*/public void registerBean(Class<?> clazz, String beanId, String... paramBeanIds)  {Object[] paramValues = new Object[paramBeanIds.length];for (int i = 0; i < paramBeanIds.length; i++) {Object paramValue = getBean(paramBeanIds[i]);if (paramValue == null) {throw new RuntimeException("Can't find bean of id: " + paramBeanIds[i]);}paramValues[i] = paramValue;}Object bean = null;// 获取并循环所有的构造方法Constructor<?>[] constructors = clazz.getConstructors();for (Constructor<?> constructor : constructors) {try {bean = constructor.newInstance(paramValues);} catch (InstantiationException e) {} catch (IllegalAccessException e) {} catch (InvocationTargetException e) {}}if (bean == null) {throw new RuntimeException("找不到合适的构造方法:" + paramBeanIds);}beans.put(beanId, bean);}
}

三、测试

public class IocContrainnerTest {private final IocContrainner iocContrainner = new IocContrainner();@Beforepublic void before() {iocContrainner.registerBean(AudiCar.class, "audi");iocContrainner.registerBean(PorscheCar.class, "porsche");iocContrainner.registerBean(BuickCar.class, "buick");iocContrainner.registerBean(Zhang3Human.class, "zhang3", "audi");iocContrainner.registerBean(Li4Human.class, "li4", "porsche");}@Testpublic void test() {Human zhang3 = (Human) iocContrainner.getBean("zhang3");zhang3.goHome();Human li4 = (Human) iocContrainner.getBean("li4");li4.goHome();}}

 

转载于:https://www.cnblogs.com/LOVE0612/p/10044896.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常染色体的隐性疾病数学建模(代数模型)

常染色体的隐性疾病数学建模&#xff08;代数模型&#xff09; 摘要&#xff1a;本文研究随交配代数的增长&#xff0c;常染色体隐性疾病的基因分布变化问题。使用代数模型&#xff0c;在正常人不与显性患者交配&#xff0c;但隐性患者可与正常人、隐性患者交配的情况下时&…

一文拆解中国火星车着陆全过程

天问一号着陆器降落火星&#xff08;艺术图&#xff09;来源&#xff1a; 深城物联 经过惊心动魄的九分钟&#xff0c;中国首个火星车祝融号成功穿越火星大气层&#xff0c;着陆于火星北半球的乌托邦平原南端。自此&#xff0c;继苏联和美国之后&#xff0c;中国成为了第三个成…

第二章 物理层 4 奈氏准则和香农定理 [计算机网络笔记]

第二章 物理层 4 奈氏准则和香农定理 本笔记参考书目&#xff1a; 计算机网络&#xff08;第8版&#xff09;谢希仁2021王道计算机网络视频公开课 本节重点&#xff1a; 奈氏准则和香农定理的计算/适用范围 转载请注明文章来源&#xff01; 失真 失真的影响因素&#xff1…

谈谈数学之现在与未来

文章来源&#xff1a;好玩的数学来源&#xff1a;《数学教学通讯》2005年3月&#xff08;上半月&#xff09;&#xff08;总第220期&#xff09;作者&#xff1a;王元&#xff08;中国科学院数学与系统科学研究院&#xff09;数学科学是什么&#xff1f;我们首先谈谈数学科学是…

SQL Server创建Job, 实现执行相同脚本而产生不同作业计划的探究

1 . 背景描述 本公司的SQL Server 服务器近百台&#xff0c;为了收集服务器运行的状态&#xff0c;需要在各个实例上部署监控Job&#xff0c;将收集到的信息推送到中央管理服务器。 收集的信息主要包括&#xff1a;慢查询、阻塞、资源等待、Connection_Trace log 、Job执行状态…

基于线性常微分方程的我国某省艾滋病传播的数学模型建立和预测分析

基于线性常微分方程的我国某省艾滋病传播的数学模型建立和预测分析 如有错误&#xff0c;欢迎指正&#xff01;转载需注明出处和作者信息&#xff01;©️Sylvan Ding 摘要 艾滋病&#xff08;AIDS&#xff09;又称获得性免疫缺陷综合征&#xff0c;由人类免疫缺陷病毒&…

神经网络的持续终身学习综述论文

来源&#xff1a;专知人和高级动物在整个生命中不断获取、微调和转让知识和技能。这种能力&#xff0c;称为lifelong learning&#xff0c;是由一系列神经认知机制协调的过程&#xff0c;这些机制共同促进了sensorimotor技能的发展以及对长期记忆的巩固和检索。因此对于计算系统…

Pensando Distributed Services Architecture [Pensando 分布式服务架构] - 翻译

Pensando Distributed Services Architecture [Pensando 分布式服务架构] - 翻译 转载需注明文章出处&#xff1a;©️ Sylvan Ding Source: M. Galles and F. Matus, “Pensando Distributed Services Architecture” in IEEE Micro, vol. 41, no. 02, pp. 43-49, 2021. D…

反思脑机接口技术:机器真的能控制我们的大脑吗?

来源&#xff1a;AI科技评论作者&#xff1a;R. Douglas Fields编译&#xff1a;陈彩娴猛烈的公牛在冲锋的途中锁定了双腿。它将双蹄扎进地下&#xff0c;在与之搏斗的人类参赛选手被刺伤之前停了下来。这个人类参赛选手不是职业斗牛士&#xff0c;而是一名西班牙神经科学家&am…

C4.5决策树生成算法完整版(Python),连续属性的离散化, 缺失样本的添加权重处理, 算法缺陷的修正, 代码等

C4.5决策树生成算法完整版(Python) 转载请注明出处&#xff1a;©️ Sylvan Ding ID3算法实验 决策树从一组无次序、无规则的事例中推理出决策树表示的分类规则&#xff0c;采用自顶向下的递归方式&#xff0c;在决策树的内部节点进行属性值的比较并根据不同的属性值判断从…

缅怀袁隆平院士:一颗稻谷里的爱国情怀

来源&#xff1a;科学网5月22日&#xff0c;《中国科学报》从中国工程院获悉&#xff0c;“共和国勋章”获得者、中国工程院院士袁隆平&#xff0c;因多器官功能衰竭&#xff0c;于2021年5月22日13时07分在长沙逝世&#xff0c;享年91岁。袁隆平对于国人来说&#xff0c;袁隆平…

k-Means——经典聚类算法实验(Matlab实现)

聚类算法—k-Means实验 k-平均&#xff08;k-Means&#xff09;&#xff0c;也被称为k-均值&#xff0c;是一种得到最广泛使用的聚类算法[1]. k-Means算法以k为参数&#xff0c;把n个对象分为k个簇&#xff0c;使得簇内具有较高的相似度。 实验目的 了解常用聚类算法及其优缺…

这5个数学猜想最早在30年前提出,如今AI证明它们都错了

来源&#xff1a;AI科技评论编译&#xff1a;琰琰编辑&#xff1a;青暮近日&#xff0c;以色列特拉维夫大学研究团队在预印论文库提交了一篇名为“Constructions in combinatorics via neural networks“的论文&#xff0c;在这篇论文中&#xff0c;研究人员通过机器学习算法证…

Java AQS 核心数据结构-CLH 锁及优化

Java AQS 核心数据结构-CLH 锁 什么是CLH锁 CLH 锁是对自旋锁的一种改进&#xff0c;有效的解决了以上的两个缺点。 第一个是锁饥饿问题。在锁竞争激烈的情况下&#xff0c;可能存在一个线程一直被其他线程”插队“而一直获取不到锁的情况。第二是性能问题。在实际的多处理上…

M/M/m排队模型 (单队列多服务台并联服务模型)数学建模: 基于生灭过程的理论计算和基于事件推进的Matlab模拟仿真思路

M/M/m排队模型 (单队列多服务台并联服务模型) 数学建模: 基于生灭过程的理论计算和基于事件推进的Matlab模拟仿真思路 原创文章&#xff0c;转载文章请注明出处&#xff1a;©️Sylvan Ding &#x1f389;&#x1f389;&#x1f389; 摘要 本文研究M/M/m单队列多服务台并…

用物理学来为生命技术及制度的演化找出规律-读《为什么世界不会失控》

来源&#xff1a;混沌巡洋舰物理学的规律是最底层的最永恒的&#xff0c;但能够对抗变化&#xff0c;维持自身结构的活系统&#xff0c;其规律则是最丰富的。“The physics of life”这本书&#xff0c;则是用能量的产生和耗散为视角&#xff0c;解释一切活系统&#xff0c;包括…

collection 多态 会自动转型为子类 继承多态需要显示转型

转载于:https://www.cnblogs.com/classmethond/p/10057670.html

深入地下,实地探访!不用人挖煤的智能煤矿长什么样?

来源&#xff1a;脑极体未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#xff08;城市&#xff09;云脑研究计划&#xff0c;构建互联网&#xff08;城市&#xff09;云脑技术和企业图谱&a…

这些行业,将率先落地AI芯片 | 星前沿

来源&#xff1a;联想之星广义上&#xff0c;所有面向AI应用的芯片都可以称为AI芯片。目前一般认为是针对AI算法做了特殊加速设计的芯片。现阶段&#xff0c;这些人工智能算法一般以深度学习算法为主&#xff0c;也可以包括其他浅层机器学习算法。人工智能芯片分类一般有按技术…

[NOI2007]社交网络

题目描述 在社交网络&#xff08;social network&#xff09;的研究中&#xff0c;我们常常使用图论概念去解释一些社会现象。不妨看这样的一个问题。在一个社交圈子里有n个人&#xff0c;人与人之间有不同程度的关系。我 们将这个关系网络对应到一个n个结点的无向图上&#xf…