主要内容

  • BeanDefinition:顾名思义,就是类定义信息,包含类的class类型、属性值、方法等信息。

  • BeanDefinitionRegistry:添加BeanDefinitionRegistry注册表接口,定义注册(存放)beanDefinition的方法。

  • SingletonBeanRegistry接口、DefaultSingletonBeanRegistry类:定义注册(存放)和获取单例bean的方法。

  • 核心类bean容器:DefaultListableBeanFactory:作为SingletonBeanRegistry和BeanDefinitionRegistry的实现类,具备两者能力,向bean容器中注册BeanDefinition后,使用bean时才会实例化。

仓库分支

仓库分支:bean_definition_and_bean_definition_registry

类图

类图

详细类图

  • AbstractBeanFactory用到了模版模式的设计模式,创建了getBean的模版方法,和其他抽象方法。

如下图,模版模式中模版抽象类中的抽象方法,可以根据方法职责分到多个子抽象类,让子类重写属于自己职责的方法,知道了这一点就能更容易看清这里的类之间的关系。

模版模式示例

测试

public class UserService {
public String save() {
System.out.println("save_success");
return "save_success";
}
}
public class BeanDefinitionAndBeanDefinitionRegistryTest {
@Test
public void test() {
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
BeanDefinition beanDefinition = new BeanDefinition();
beanDefinition.setClazz(UserService.class);
beanFactory.registerBeanDefinition("userService", beanDefinition);
UserService userService = (UserService)beanFactory.getBean("userService") ;
userService.save();
}
}

测试结果

save_success

Process finished with exit code 0

[源码系列:手写spring] IOC第二节:BeanDefinition和BeanDefinitionRegistry的更多相关文章

  1. Spring源码分析 手写简单IOC容器

    Spring的两大特性就是IOC和AOP. IOC Container,控制反转容器,通过读取配置文件或注解,将对象封装成Bean存入IOC容器待用,程序需要时再从容器中取,实现控制权由程序员向程序的 ...

  2. 《四 spring源码》手写springioc框架

    手写SpringIOCXML版本 /** * 手写Spring专题 XML方式注入bean * * * */ public class ClassPathXmlApplicationContext { ...

  3. 框架源码系列十:Spring AOP(AOP的核心概念回顾、Spring中AOP的用法、Spring AOP 源码学习)

    一.AOP的核心概念回顾 https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/core.html#a ...

  4. 从零开始手写 spring ioc 框架,深入学习 spring 源码

    IoC Ioc 是一款 spring ioc 核心功能简化实现版本,便于学习和理解原理. 创作目的 使用 spring 很长时间,对于 spring 使用非常频繁,实际上对于源码一直没有静下心来学习过 ...

  5. 框架源码系列六:Spring源码学习之Spring IOC源码学习

    Spring 源码学习过程: 一.搞明白IOC能做什么,是怎么做的  1. 搞明白IOC能做什么? IOC是用为用户创建.管理实例对象的.用户需要实例对象时只需要向IOC容器获取就行了,不用自己去创建 ...

  6. 《四 spring源码》手写springmvc

    手写SpringMVC思路 1.web.xml加载  为了读取web.xml中的配置,我们用到ServletConfig这个类,它代表当前Servlet在web.xml中的配置信息.通过web.xml ...

  7. Spring源码 20 手写模拟源码

    参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...

  8. 利用递归,反射,注解等,手写Spring Ioc和Di 底层(分分钟喷倒面试官)了解一下

    再我们现在项目中Spring框架是目前各大公司必不可少的技术,而大家都知道去怎么使用Spring ,但是有很多人都不知道SpringIoc底层是如何工作的,而一个开发人员知道他的源码,底层工作原理,对 ...

  9. Spring源码剖析3:Spring IOC容器的加载过程

    本文转自五月的仓颉 https://www.cnblogs.com/xrq730 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https ...

  10. Spring源码剖析2:Spring IOC容器的加载过程

    spring ioc 容器的加载流程 1.目标:熟练使用spring,并分析其源码,了解其中的思想.这篇主要介绍spring ioc 容器的加载 2.前提条件:会使用debug 3.源码分析方法:In ...

随机推荐

  1. Python连接远程设备

    import paramiko def content_ssh(): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(parami ...

  2. 测试直播伴侣和OBS对透明度的支持哪个好?

    测试直播伴侣和OBS对透明度的支持哪个好? 抖音无人直播,用抖音弹幕助手 测试直播伴侣和OBS对透明度的支持哪个好?抖音无人直播,用抖音弹幕助手 ​测试地址1 ​测试地址2

  3. 深入解析 Spring AI 系列:解析OpenAI接口对接

    今天我们将主要探讨OpenAI是如何进行接口对接的,虽然我们不打算深入细节,但会对整体流程进行一个大概的了解.后续会逐步分析其中的具体细节,大家可以耐心等待,逐步展开.好的,现在让我们开始,下面是我简 ...

  4. Kubernetes Pod状态和生命周期管理

    ​Pod​​​是​​kubernetes​​​中你可以创建和部署的最小也是最简的单位.​​Pod​​代表着集群中运行的进程. ​​Pod​​​中封装着应用的容器(有的情况下是好几个容器),存储.独立的 ...

  5. jQuery---操作指南

    功能代码(1)---通过Jquery来处理复选框 实现以下功能: 1:选中第一个复选框,那么下面所有的复选框都选中,去除选中第一个复选框,下面的都不选中 2:当点击全选按钮,上面足球.篮球.游泳.唱歌 ...

  6. ubuntu mysql 通过ip登录指南

    详细步骤: 1. 安装mysql 首先,在ubuntu上安装mysql,打开终端,并执行以下命令: 1 sudo apt-get update 2 sudo apt-get install mysql ...

  7. MySQL5.7x 主从复制

    原文链接:https://blog.liuzijian.com/post/9f8ede8e-26de-75d6-6347.html 在MySQL中,主从复制(Master-Slave Replicat ...

  8. Codeforces Round 998 (Div. 3)

    题目链接:Codeforces Round 998 (Div. 3) 总结:复建,Cwa两发,E读假题了. A. Fibonacciness tag:签到 Solution:简单模拟一下即可. voi ...

  9. dart中Set类型详解

    01==> Set 它的主要功能是去除重复的数组内容: Set是没有顺序且不能够重复的数组,所以不能够通过索引值去获取内容 var s = new Set(); s.add('苹果'); s.a ...

  10. RocketMQ实战—1.订单系统面临的技术挑战

    大纲 1.一个订单系统的整体架构.业务流程及负载情况 2.订单系统面临的技术问题一:下订单的同时还要发券.发红包.Push推送等导致性能太差 3.订单系统面临的技术问题二:订单退款时经常流程失败导致无 ...