Spring源码初次学习--实现一个简单的SpringBean容器

容器是什么?

在Spring中Spring容器用于创建、存储、管理、分发Bean的一个容器。Spring用HashMap来作为容器使用。

设计一个简单的容器

思考:容器需要具备哪些功能?

  • Bean的定义
  • Bean的注册
  • Bean的获取

Bean的定义

BeanDefinition是在Spring中常用的一个类,他的功能主要是对Bean进行定义

/**
 * Bean对象的定义信息
 */
public class BeanDefinition {
            //用于存储任意类型的对象
            private Object bean;
            //构造方法
            public BeanDefinition(Object bean) {
                this.bean = bean;
            }
            //获取Bean的方法
            public Object getBean(){return bean;}
    }

Bean的注册

  • 思考:注册?
    • 注册过程相当于把数据放入HashMap的一个过程,目前存放的是Bean对象的定义信息
/**
 * 简单Bean工厂
 */
public class BeanFactory {
            //存放Bean的定义信息
            private Map<String,BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>();
            /**
             * 注册Bean
             */
            private void registerBeanDefinition(String name, BeanDefinition beanDefinition){
                beanDefinitionMap.put(name,beanDefinition);
            }
}

Bean的获取

/**
 * 简单Bean工厂
 */
public class BeanFactory {
    //存放Bean的定义信息
    private Map<String,BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>();
    //注册Bean
    private void registerBeanDefinition(String name, BeanDefinition beanDefinition){
        beanDefinitionMap.put(name,beanDefinition);
    }
    /**
     * 获取bean
     * @param name
     * @return
     */
    public Object getBean(String name) {
        return beanDefinitionMap.get(name).getBean();
    }
}

一个简单的Bean容器就创建好了,接下来测试一下

测试

准备测试代码

public class UserService {
    public void queryUserInfo(){
        System.out.println("查询用户信息");
    }
}
public class ApiTest {
    @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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值