手写Spring第二篇,实现一个超级无敌爆炸简单的Spring工厂

news2024/9/20 8:46:18

今天开始我要手写一个Spring,就是这么膨胀。小小Spring,拿下!注意是小小Spring哈,不是Spring本体,毕竟本体连看懂都难,就别说能充分理解然后手写出来。

本次手写Spring全程参考 第01章:开篇介绍,我要带你撸 Spring 啦! | 小傅哥 bugstack 虫洞栈
你要说我能不能不抄别人,那指定是不能的,虽然很想自己从现有的 Spring 中把核心部分抽离出来,毕竟自己动比较爽。总之千言万语汇成一句话:实力不允许啊。

image.png

不过呢?我会在学习的过程中,将自己的思考全盘记录下来,相信你不管是菜鸡还是大神都能受用。因为本菜鸡写出来的东西,一般菜鸡还是能看懂的。如果看不懂就证明你比我更加菜,哈哈哈哈。

image.png

废话不多说,直接开搞。标题写的啥来着?不是我跑题,我是试你来着。搞一个超级简单的Spring容器,整高端点应该叫 BeanFactoryFactory 这个单词我认识–工厂,那 Bean 是啥?我翻译了一下,他说是豆子。这么一推理,BeanFactor 那指定是生产豆子的豆子工厂,一点毛病没有。

BeanFactory 的设计就出来了

public class BeanFactory {  
    Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>();  
    // 要什么豆子先来这里登记
    public void register(String name, BeanDefinition beanDefinition) {  
        beanDefinitionMap.put(name, beanDefinition);  
    }
    // 拿豆子
    public BeanDefinition getBean(String name) {  
        return beanDefinitionMap.get(name);  
    }  
}

BeanDefinition 就是豆子的特征值,比如你买豆子的时候就会跟老板说,要一个绿豆,饱满一点的,再不济你那一个给他看,然后说来一个和这个一样的豆子。

public class BeanDefinition {  
    private final Object bean;  
  
    public BeanDefinition(Object bean) {  
        this.bean = bean;  
    }  
    public Object getBean(){  
        return this.bean;  
    }  
}

那领豆子的流程是怎么样的?

public class BeanFactoryTest {  
    @Test  
    public void test() {  
        // 1.我先把工厂搞起来
        BeanFactory beanFactory = new BeanFactory();  
  
        // 2.你准备好要什么豆子  
        Bean bean = new Bean();  
        BeanDefinition beanDefinition = new BeanDefinition(bean);  
  
        // 3.登记豆子信息  
        beanFactory.register("beanName", beanDefinition);  
  
        // 4.取豆子  
        BeanDefinition bd = beanFactory.getBean("beanName");  
  
        // 5.用豆子  
        Bean b = (Bean) bd.getBean();  
        b.test();  
    }  
}

public class Bean {  
    public Bean() {  
    }  
    public void test() {  
        System.out.println("我是一颗绿豆子");  
    }  
}

我发现你小子来过我工厂之后,怎么其他人都不来了?原来是你小子来过我工厂之后,回去和大家说你拿来做登记的样品被我收了,然后取豆子的时候就是这个样品。

既然自己都有豆子了还去工厂干嘛?还耽误时间跑去工厂,这工厂迟早倒闭。确实我家工厂还没布置生产线,只能大家先带过来。下次我布置好生产线就不用带样品了。

而且你小子不识货啊,我家工厂有特殊技术,如果有其他人想要和你样品一样的豆子,都可以来取。我从吗喽那里求来一种仙术,名叫指针。

image.png

如果其他人也来工厂拿你拿过的豆子,我可以拿一个豆子指针给她,这个豆子指针和原来的豆子一模一样,没有区别。你们可以有一个一模一样的豆子,你把豆子切了两半,她也看到豆子变成两半了。就是这么神奇,真的不要试试吗?

虽然现在的工厂用起来还有点…呃简陋,不过相信我,生产线马上就好了。

能不能用另说,你就说是不是最简单的吧?我工厂连生产都不用,简单这个事情是不是拿捏得死死的?

总之不管三七二十一,我们先给他实现了。实践是检验真理的唯一标准,先做起来其他的慢慢就懂了。

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

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

相关文章

运行容器应用

kubernetes通过各种controller来管理pod的生命周期&#xff0c;为了满足不同的业务场景&#xff0c;kubernetes开发了Deployment&#xff0c;ReplicaSet&#xff0c;DaemonSet&#xff0c;StatefulSet&#xff0c;Job等多种ControllerDeployment&#xff1a; kubectl run nginx…

视频去重剪辑软件哪个好用?这3款工具值得一试!

很多人都喜欢在视频平台上分享自己的剪辑作品。随着视频数量的激增&#xff0c;视频去重成为了一个不可忽视的问题。无论是为了遵守版权法规&#xff0c;还是为了提升内容的独特性和吸引力&#xff0c;选择一款好用的视频去重剪辑软件都显得尤为重要。本文将推荐几款优秀的视频…

硬件工程师笔试面试——晶振

目录 13、晶振 13.1 基础 晶振原理图 晶振实物图 13.1.1 概念 13.1.2 工作原理 13.1.3 应用领域 13.1.4 产品类型 13.2 相关问题 13.2.1 晶振的工作原理是什么,它如何保证频率的稳定性? 13.2.2 在工业控制领域,晶振是如何确保精确度的? 13.2.3 晶振的Q值是如何…

pc端的屏保实现

背景 偶然间&#xff0c;在使用一款google插件的时候&#xff0c;发现它有一个小功能&#xff0c;只要我停留在它的页面不操作10分钟以上&#xff0c;就会自动给我打开一个屏保界面&#xff0c;这样的 目的 这种华而不实的功能&#xff0c;正好适合个人博客&#xff0c;所以…

STM32MP157/linux驱动学习记录(二)

38.Linux INPUT 子系统实验 按键、鼠标、键盘、触摸屏等都属于输入(input)设备&#xff0c;Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设备&#xff0c;只是在此基础上套上了 input 框架&#xff0c;用户只需要负责上报输入事件…

健身器材识别系统源码分享

健身器材识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

2024年【电气试验】试题及解析及电气试验模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【电气试验】试题及解析及电气试验模拟考试题&#xff0c;包含电气试验试题及解析答案和解析及电气试验模拟考试题练习。安全生产模拟考试一点通结合国家电气试验考试最新大纲及电气试验考试真题汇总&#xff0…

数据结构之‘栈’

文章目录 1.简介2. 栈的初始化和销毁3. 进栈和出栈3.1 进栈3.2 出栈3.3 栈的打印 1.简介 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行&#xff08;数据插入和删除操作&#xff09;的一端称为栈顶&#xff0c;另一端称为栈底。压栈&#xf…

C++中的const \static \this

目录 前言 一、const关键字 1、const修饰类的成员变量 2、const修饰类的成员函数 3、const修饰类的对象 二、static关键字 1、static修饰类中的成员变量 1. 共享性 2. 初始化 3. 访问权限 4. 内存分配 5. 不依赖于对象 2、static修饰类中的成员函数 三、this关键字…

OpenHarmony(鸿蒙南向开发)——标准系统方案之扬帆移植案例

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——轻量系统STM32F407芯片移植案…

SHL笔试测评系统题库考什么?如何通过综合测评|附性格测试104道

嘿&#xff0c;各位求职小伙伴们&#xff01;我是职小豚&#xff0c;今天就来带大家深入了解神秘又充满挑战的 SHL 笔试测评系统。 一、SHL 人才测评系统介绍 SHL 呀&#xff0c;那可是人才测评领域的超级大明星&#xff01;就像一个智慧的魔法师&#xff0c;用各种神奇的题目…

Linux系统之head命令的基本使用

Linux系统之head命令的基本使用 一、head命令介绍二、head命令的使用帮助2.1 head命令的help帮助信息2.2 head命令的语法解释 三、head的基本使用3.1 直接使用3.2 查看文件前N行3.3 查看多个文件3.4 查询文件的前5行3.5 显示文本所有内容&#xff08;除了后5行内容&#xff09;…

实战讲稿:Spring Boot整合MyBatis

文章目录 实战讲稿&#xff1a;Spring Boot整合MyBatis课程目标课程内容1. 创建员工映射器接口1.1 创建子包1.2 创建接口 2. 测试员工映射器接口2.1 自动装配员工映射器2.2 测试按标识符查询员工方法2.3 测试查询全部员工方法2.4 测试插入员工方法2.5 测试更新员工方法2.6 测试…

No module named MYSQLdb 问题解决

问题&#xff1a; 导入写好的数据库时报错 解决&#xff1a;pip install mysql-python &#xff08;又报错&#xff09; 找了网上的方法&#xff1a; 执行 pip install PyMySQL&#xff0c;将数据库连接改为 mysqlpymysql://username:passwordserver/db&#xff0c;接下来的操…

eggtart队比赛攻略

关联比赛: “新内容 新交互”全球视频云创新挑战赛--算法挑战赛道 赛题回顾 本次赛题核心为高清视频人像分割&#xff0c;属于无监督视频物体分割任务&#xff0c;要求在未提供任何额外输入的情况下&#xff0c;识别并定位视频中的主要人物&#xff0c;并精确到图像的每个像素…

微服务配置中心介绍

在微服务架构中&#xff0c;配置中心是一个非常重要的组件&#xff0c;它负责管理所有服务的配置信息&#xff0c;使得配置管理变得更加集中和动态。配置中心能够极大地提高微服务架构的灵活性和可维护性。 为什么需要配置中心&#xff1f; 在传统的单体应用中&#xff0c;配置…

22:SPI一:简单的使用

SPI简单的使用 1、什么是SPI2、数据通信2.1&#xff1a;5个重要参数2.2&#xff1a;4种传输模式 3、程序模拟SPI通信时序3、片上外设SPI通信时序 1、什么是SPI SPI是一种同步的&#xff0c;全双工&#xff0c;支持总线挂载多设备的通信协议。它特别适用于高效&#xff0c;快速…

【Python报错已解决】 TypeError: Descriptors cannot not be created directly

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

计算机毕业设计 健身房管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

MUNIK谈ASPICE系列专题分享(六)企业为什么要做ASPICE?

前言&#xff1a; 知名的几家主机厂对ASPICE有什么各自的要求&#xff1f;企业应该做哪些应对 1-说到“企业为什么要做ASPICE”这个话题&#xff0c;我们首先需要了解一下ASPICE的历史。 在1993年&#xff0c;国际标准化组织&#xff08;ISO&#xff09;和国际电工委员会&am…