spring是怎么去管理bean的呢?学习一下手撸spring.
第一步先来简单的实现一个Bean容器的注册与获取
所谓容器就是能够存储元素的结构就是容器, 例如List, Set 和Map
在Spring Bean容器的场景下, 需要存放名称为索引的数据结构, HashMap就是个合适的选择, 工厂模式一般也都是这么搞的.
先画个图
那个Bean没有那么重要,第一步先来创建BeanDefinition,因为是简单版,一开始就只有一个bean,后续会慢慢加入其他的属性
/**
* 定义一个bean
*/
@Data
@AllArgsConstructor
public class BeanDefinition {
private Object bean;
}
然后是bean工厂, 一个是容器, 然后就是注册和获取方法
/**
* bean工厂
*/
public class BeanFactory {
/**
* bean容器
*/
private Map<String,BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>();
/**
* 通过定义类获取其中的bean
* @param beanName
* @return
*/
public Object getBean(String beanName){
return beanDefinitionMap.get(beanName).getBean();
}
/**
* 注册一个bean的定义类
* @param beanName
* @param beanDefinition
*/
public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition){
beanDefinitionMap.put(beanName,beanDefinition);
}
}
然后是简单的bean
public class UserService {
public void queryUserInfo(){
System.out.println("查询用户信息");
}
}
然后我们来简单的走一下流程
@Test
public void test1(){
//创建bean工厂
BeanFactory beanFactory = new BeanFactory();
//定义一个UserService
BeanDefinition beanDefinition = new BeanDefinition(new UserService());
//将定义注册到bean工厂中
beanFactory.registerBeanDefinition("userService",beanDefinition);
//通过bean名 到工厂中获取bean
UserService userService = (UserService) beanFactory.getBean("userService");
userService.queryUserInfo();
}
这就是简单的一个bean管理容器的过程了, 可以很容易的去了解一下其流程