开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第16天,点击查看活动详情
1.1 容器的理解
Bean对象 交给Spring Bean 容器管理,这个Bean 对象就会被拆解,存储到 Spring Bean 容器的定义中,便于管理和解耦。
当对象被定义和存储后,会由Spring Bean 容器统一进行分配,包括 Bean对象的初始化和属性填充。
1.2 简单容器设计
存储数据的数据结构称为容器,在Spring 中,需要存储对象名称和对象的数据结构,所以HashMap 最合适。
BeanDefinition :保存对象的 singleton属性,property type 属性等等。
代码实现
public class BeanDefinition {
/**
* @Author: Take-off
* @Description: //TODO 所有对象的父类
* @Date: 5:16 PM 2022/12/9
**/
private Object bean;
public BeanDefinition(Object bean) {
this.bean = bean;
}
public Object getBean() {
return bean;
}
}
BeanFactory:Bean对象工厂,可以将Bean对象的定义存储到Map中。用于生成和使用对象
public class BeanFactory {
//ConcurrentHashMap 就是线程安全 的 HashMap
private Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>();
//通过名字获取
public Object getBean(String name) {
return beanDefinitionMap.get(name).getBean();
}
//注册
public void registerBeanDefinition(String name, BeanDefinition beanDefinition) {
beanDefinitionMap.put(name, beanDefinition);
}
}
具体的容器代码已经实现了,接下来设计一个Bean对象和测试类测试一下
Bean对象
public class User {
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 User());
beanFactory.registerBeanDefinition("user", beanDefinition);
// 3.获取bean
User userService = (User) beanFactory.getBean("user");
userService.queryUserInfo();
}
}