4、Spring手写系列-为Bean对象注入属性和依赖Bean的功能实现

一、前言

        在软件开发中,系统的健壮性和抗压能力是衡量程序优劣的重要指标。无论是高并发场景下的超卖问题,还是复杂业务逻辑中的幂等性,开发人员都需要具备处理这些问题的能力。而这些问题往往不是通过简单的CRUD操作就能解决的,它需要深厚的技术积累和良好的架构设计。对于初级程序员来说,可能会遇到代码丢三落四、乱码等问题,这不仅影响系统的稳定性,还可能带来隐患。在这种情况下,要想让你的程序“抗揍”,就必须提升自己的技术水平,理解并应用更高级的设计理念和模式。

在之前的章节中,我们实现了一个简化版的Spring Bean容器,支持Bean的注册和实例化。尽管我们已经支持了构造函数的Bean实例化,但还没有处理Bean的属性注入和依赖注入功能。这些功能对于一个完整的IoC容器来说是必不可少的。因此,本章节的目标是为Bean对象注入属性和依赖Bean的功能实现奠定基础。

二、目标

通过本章节的学习,你将学会:

  1. 为Bean对象注入属性。
  2. 实现Bean之间的依赖注入。
  3. 完成Bean对象的完整实例化过程,包括属性填充。

三、设计

在设计过程中,我们需要解决以下几个关键问题:

  1. 属性注入的时机:属性注入应该在Bean实例化之后进行。因此,我们需要在AbstractAutowireCapableBeanFactorycreateBean方法中添加一个补全属性的方法,即applyPropertyValues

  2. 属性值的表示:为了支持属性注入,我们需要在BeanDefinition中添加PropertyValuesPropertyValues是一个集合类,用于存储多个PropertyValuePropertyValue代表一个具体的属性,包含属性名和属性值。

  3. 依赖注入的处理:在属性注入的过程中,如果属性值是一个未实例化的Bean对象,需要递归地进行实例化和注入。这涉及到通过BeanReference来引用其他Bean,从而实现依赖注入。

1. UML类图

以下是实现这一功能的核心类和接口的结构图:

└── src
    ├── main
    │   └── java
    │       └── cn.mxy.springframework.beans
    │           ├── factory
    │           │   ├── config
    │           │   │   ├── BeanDefinition.java       // Bean定义类,增加PropertyValues属性
    │           │   │   ├── BeanReference.java        // 用于表示Bean的引用
    │           │   │   └── SingletonBeanRegistry.java// 单例Bean注册表接口
    │           │   ├── support
    │           │   │   ├── AbstractAutowireCapableBeanFactory.java // 实现属性注入逻辑
    │           │   │   ├── AbstractBeanFactory.java  // BeanFactory抽象类
    │           │   │   ├── BeanDefinitionRegistry.java// Bean定义注册表
    │           │   │   ├── DefaultListableBeanFactory.java // 默认BeanFactory实现
    │     
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值