手写Spring1(简单的Spring容器)


前言

之前虽然也手写过spring,不过是写的非常非常基础的版本

这个系列主要是一个学习笔记,最近在看小博哥的渐进式手写Spring

Spring也反反复复学过好几遍了,书籍、视频、源码对主脉络其实很熟悉了,但是对Spring的理解,总感觉差临门一脚,希望通过这次的学习能对Spring有个更加清晰的认识


本章目标

手写一个非常基础的Bean容器、可以用于定义、存放、获取bean,方便后续持续扩展


一、设计

定义BeanBeanDefinition,是你在查阅 Spring 源码时经常看到的一个类,例如它会包括 singletonprototypeBeanClassName 等。但目前我们初步实现会更加简单的处理,只定义一个 Object 类型用于存放对象。

注册Bean:这个过程就相当于我们把数据存放到 HashMap 中,只不过现在 HashMap 存放的是定义了的 Bean 的对象信息。

获取Bean:最后就是获取对象,Bean 的名字就是key,Spring 容器初始化好 Bean 以后,就可以直接获取了。


二、实现

1、工程结构

├─src
       ├─main
       │  ├─java
       │  │  └─cn
       │  │      └─ljc
       │  │          └─springframework
       │  │                  BeanDefinition.java
       │  │                  BeanFactory.java
       │  │
       │  └─resources
       └─test
           └─java
               └─springframework
                   └─test
                       │  ApiTest.java
                       │
                       └─bean
                               UserService.java

2、Bean定义

public class BeanDefinition {

    private Object bean;

	// 定义Bean
    public BeanDefinition(Object bean) {
        this.bean = bean;
    }

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

}

3、Bean 工厂

public class BeanFactory {

    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);
    }

}

三、测试

1、事先准备测试类

public class UserService {

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

}

2、测试用例

@Test
public void test_BeanFactory(){
    // 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();
}

3、测试结果

查询用户信息

四、总结

一个简单的Bean容器就完成了,已经初具雏形

代码不多,但是重在理解他的思想、设计、方案

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未闻花名丶丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值