容器是什么?
在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();
}
}