Spring实现简单的Bean容器

news2024/12/24 0:01:01

 1.BeanDefinition,用于定义 Bean 实例化信息,现在的实现是以一个 Object 存放对象

public class BeanDefinition {

    /**
     * bean对象
     */
    private Object bean;

    /**
     * 存放 (定义)Bean 对象
     */
    public BeanDefinition(Object bean) {
        this.bean = bean;
    }

    /**
     * 获取bean对象
     */
    public Object getBean() {
        return bean;
    }

}

2.BeanFactory,代表了 Bean 对象的工厂,可以存放 Bean 定义到 Map 中以及获取。

public class BeanFactory {

    /**
     * 在 Bean 工厂的实现中,包括了 Bean 的注册,这里注册的是 Bean 的定义信息。同时在这个类中还包括了获取 Bean 的操作。
     * 目前的 BeanFactory 仍然是非常简化的实现,但这种简化的实现内容也是整个 Spring 容器中关于 Bean 使用的最终体现结果,
     * 只不过实现过程只展示出基本的核心原理。在后续的补充实现中,这个会不断变得庞大
     */

    /**
     * 存放
     */
    private Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>();

    /**
     *获取bean
     */
    public Object getBean(String name) {
        return beanDefinitionMap.get(name).getBean();
    }
    /**
     *注册bean
     */
    public void registerBeanDefinition(String name, BeanDefinition beanDefinition) {
        beanDefinitionMap.put(name, beanDefinition);
    }

}

3.测试

public class UserService {

    public void queryUserInfo(){
        System.out.println("查询用户信息");
    }

}

public class ApiTest {

    @Test
    public void test_BeanFactory(){

        /**
         * 在单测中主要包括初始化 Bean 工厂、注册 Bean、获取 Bean,三个步骤,使用效果上贴近与 Spring,但显得会更简化。
         * 在 Bean 的注册中,这里是直接把 UserService 实例化后作为入参传递给 BeanDefinition 的,
         * 在后续的陆续实现中,我们会把这部分内容放入 Bean 工厂中实现。
         */


        // 1.初始化 BeanFactory
        BeanFactory beanFactory = new BeanFactory();

        // 2.注入bean
        BeanDefinition beanDefinition = new BeanDefinition(new UserService());
        beanFactory.registerBeanDefinition("userService", beanDefinition);

        // 3.获取bean
        UserService userService = (UserService) beanFactory.getBean("userService");
        userService.queryUserInfo();
    }

}

4.结果

 

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

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

相关文章

RFID用于仓库盘点,省时省力

RFID用于仓库盘点&#xff0c;省时省力 RFID技术已经被广泛应用在工业制造和日常生活当中。它使用射频信号来识别和跟踪标签中的信息。RFID系统由两个主要组件组成&#xff1a;RFID标签和RFID读写器。RFID标签通常由一个芯片和一个天线组成。标签内的芯片存储着特定的数据&…

监控员工聊天记录违法吗?监控员工聊天记录软件

在现代社会&#xff0c;企业面临着如何确保员工工作效率和质量的挑战。为了解决这一问题&#xff0c;一些企业选择监控员工的聊天记录&#xff0c;以确保他们遵守公司规定&#xff0c;不泄露敏感信息&#xff0c;以及避免工作效率低下。然而&#xff0c;这种做法是否合法呢&…

阿里巴巴K8S集成seata

正文 在K8S集成seata&#xff0c;官方配置 代码 apiVersion: v1 kind: Service metadata:name: seata-servernamespace: wmz-devlabels:k8s-app: seata-server spec:type: NodePortports:- port: 8091nodePort: 30091protocol: TCPname: httpselector:k8s-app: seata-server-…

适合中小企业的推荐佳企业备份软件

企业环境通常比单个工作站拥有更多的机器、更多的数据和更多的人员&#xff0c;这些可能会带来更多的潜在风险——96%的企业经历过至少一种数据丢失的主要原因&#xff1a;人为错误、系统崩溃、硬件故障、病毒袭击、停电、火灾和自然灾害。 数据丢失对企业造成的损害不仅在…

Rhino犀牛技巧[导出DXF给AD]

导出DXF给AD 按照默认的方式导出,在AD会缺失线: 导出的事后选择"2004 直线" 这时候AD导出的线就没有缺失的了:

AI在小分子领域应用

5 小分子应用的AI 在化学中&#xff0c;小分子指的是相对分子量较低的有机化合物。它通常由少量原子组成&#xff0c;通常少于100个&#xff0c;并具有明确定义的化学结构。小分子与大分子相对比&#xff0c;大分子如蛋白质、核酸和聚合物在大小上要大得多&#xff0c;通常具有…

React脚手架-详细解析目录与运行

分析执行流程就是&#xff1a;导库 -> 页面节点 -> 组件 -> 组件挂载页面 这里面核心就是 页面节点index.html 、 组件挂载页面 index.js 、 组件render App.js index.css 是对页面的渲染&#xff08;通用型样式&#xff09; 、App.css 是对组件的渲染 首先就是执…

【51单片机】9-定时器和计数器

1.定时器的介绍 1.什么是定时器 &#xff08;1&#xff09;SoC的一种内部的外设【在单片机里面&#xff0c;但是在CPU外面】 &#xff08;2&#xff09;定时器就是CPU的”闹钟“ 2.什么是计数器 &#xff08;1&#xff09;定时器就是用计数的原始实现的 &#xff08;2&#xf…

PyCharm中使用pyqt5的方法2-2

1.2 是否下载成功 按照以上步骤安装了“pyqt5”、“pyqt5-tools”模块和“pyqt5designer”模块后&#xff0c;可以打开保存这三个模块的路径&#xff0c;找到其对应的文件夹&#xff0c;即可验证是否下载成功。 获取PyCharm保存下载模块路径的方法是&#xff0c;在PyCharm界面…

Blender 之创建一个简单的笔筒

文章目录 成品图实现步骤 你是不是想创建一个笔筒捏&#xff1f; follow me! 成品图 实现步骤 先添加一个柱体 选中柱体&#xff0c;然后按tab 进入编辑模式 切换到面模式 &#xff08;可以按主键盘的 3 键&#xff09; 分别选中上下面&#xff0c;鼠标右键&#xff0c;选…

风力发电一键求助可视对讲终端

SV-11SV 风力发电一键求助可视对讲终端 SIP可视对讲终端SV-11SV是专门针对行业用户需求研发的一款高性价比SIP可视对讲产品&#xff0c;外观精致&#xff0c;功能强大&#xff0c;集智能安防、音/视频对讲和广播功能于一体&#xff0c;性价比高。支持壁挂式安装方式。防护等级满…

安达发|在国外APS自动排程软件案例比比皆是

在国外&#xff0c;APS&#xff08;自动排程系统&#xff09;的应用已经非常普遍&#xff0c;它们在各个领域都取得了显著的成果。本文将为您详细介绍国外APS自动排程的案例&#xff0c;以及它们在实际生产中的价值和意义。 1. 制造业 在制造业领域&#xff0c;APS自动排程系统…

JDK下载安装配置教材

1.JDK下载 目前市面上的公司大多数采用的是jdk8进行开发 &#xff0c;所以本文就以jdk8的下载安装配置为例来讲解。 因为Oracle的官网地址访问网速比较慢&#xff0c;所以下载速度较慢&#xff0c;本文我演示的是jdk8的下载&#xff0c;如果需要下载jdk8的小伙伴可以直接在我…

26047-2022 一次柱式锂电池绝缘子 思维导图

声明 本文是学习GB-T 26047-2022 一次柱式锂电池绝缘子. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了一次柱式锂电池绝缘子产品的分类和标记、技术要求、试验方法、检验规则、标志、包 装、运输、贮存和随行文件及订货单内容…

【JVM】第四篇 垃圾收集器ParNewCMS底层三色标记算法详解

导航 一. 垃圾收集算法详解1. 分代收集算法2. 标记-复制算法3. 标记-清除算法4. 标记-整理算法二. 垃圾收集器详解1. Serial收集器2. Parallel Scavenge收集器3. ParNew收集器4. CMS收集器三. 垃圾收集底层三色标记算法实现原理1. 垃圾收集底层使用三色标记算法的原因?2. 垃圾…

C++ - set 和 map 的实现(下篇)- set 和 map 的迭代器实现

前言 在上篇当中我们为了 让红黑树适用于 set 和 map 对红黑树进行了修改&#xff0c;还是实现了红黑树的迭代器&#xff0c;因为 set 和 map 的底层都是使用 红黑树&#xff0c;那么&#xff0c;set 和 map 的迭代器也就实现了。具体可以看本博客的上篇&#xff1a;C - map 和…

Windows提权辅助工具WES-NG使用

Windows提权辅助工具WES-NG使用 1.下载安装2.开始使用1.下载安装 WES-NG 执行此命令更新CVE数据库: python wes.py --update2.开始使用 首先,生成系统systeminfo信息,并重定向一个txt文件中: systeminfo > systeminfo.txt查找提权可以利用的CVE: python wes.py s…

还不知道数据类岗位的相关技能和职责吗?涤生大数据告诉你(二)

续接上文&#xff1a;还不知道数据类岗位的相关技能和职责吗&#xff1f;涤生大数据告诉你&#xff08;一&#xff09; 1.数据治理工程师 工作职责 数据治理工程师的工作职责主要包括以下几个方面&#xff1a; 1. 数据管理策略制定&#xff1a;制定和实施数据管理策略&#…

【HCIE】VXLAN

VXLAN简介 介绍VXLAN的定义、目的和收益。 定义 RFC7348定义了VLAN扩展方案VXLAN&#xff08;Virtual eXtensible Local Area Network&#xff09;。VXLAN采用MAC in UDP&#xff08;User Datagram Protocol&#xff09;封装方式&#xff0c;是NVO3&#xff08;Network Virt…

YashanDB向量化执行引擎如何给海量数据分析提速

作者介绍&#xff1a;李伟超&#xff0c;数据库系统架构师&#xff0c;YashanDB架设技术开发负责人&#xff0c;10年以上数据库内核技术开发经验。 *全文4510个字&#xff0c;阅读时长约11分钟。 背景 海量数据OLAP场景&#xff0c;通常具有数据规模大、查询复杂度高、处理速…