第一节:创建简单的IOC容器
什么是bean容器
spring负责管理bean的配置和生命周期,所以可以理解为是承载bean的容器。我们可以设置bean的创建方式(单例还是多例),以及搭建他们之间的依赖(DI)。
为了让spring容器统一管理bean,我们需要做到将bean以统一的格式进行“拆分”,存放到bean的“定义”中去(beanDefiniton),例如类的class对象,将这些详细的“定义”交给spring保存就足够从0创建和配置bean。
简单的bean容器的设计
采用hashMap,能够做到高效的键值对存取。 关于hashMap的优点(集合了数组的索引式查找和链表的便于增删)可以看另外一篇文章: hashMap原理
在bean容器的讨论中我们分析出,需要一个BeanDefinition类保存bean的“定义”,然后BeanFactory用于保存和获取bean、以及注册bean。
一开始,我们设计的beanDefinition直接保存一个bean对象
public class BeanDefinition{
private Object bean;//保存的信息直接就是一个对象
public BeanDefinition(Object bean) {
this.bean = bean;
}
public Object getBean(){
return bean;
}
}
bean工厂则是提供了bean对象的注册与获取
public class BeanFactory{
private Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>();
public Object getBean(String name){
return beanDefinitionMap.get(name).getBean();
}
public void registerBeanDefinition(String name,BeanDefinition beanDefinition){
beanDefinition.put(name, beanDefinition);
}
}
由此一个最简单的简单的bean容器就创建好了
具体的测试代码可以看书籍
- 实例化beanFactory
- 注册某个bean
- 获取bean
总结
重点是理解需要一个 beanDefinition, 即bean工厂最需要保存的是定义信息,其次才是bean对象本身,因为可以根据定义信息动态创建对象