1.BeanDefinition,用于定义 Bean 实例化信息,现在的实现是以一个 Object 存放对象
public class BeanDefinition {
/**
* bean对象
*/
private Object bean;
/**
* 存放 (定义)Bean 对象
*/
public BeanDefinition(Object bean) {
this.bean = bean;
}
/**
* 获取bean对象
*/
public Object getBean() {
return bean;
}
}
2.BeanFactory,代表了 Bean 对象的工厂,可以存放 Bean 定义到 Map 中以及获取。
public class BeanFactory {
/**
* 在 Bean 工厂的实现中,包括了 Bean 的注册,这里注册的是 Bean 的定义信息。同时在这个类中还包括了获取 Bean 的操作。
* 目前的 BeanFactory 仍然是非常简化的实现,但这种简化的实现内容也是整个 Spring 容器中关于 Bean 使用的最终体现结果,
* 只不过实现过程只展示出基本的核心原理。在后续的补充实现中,这个会不断变得庞大
*/
/**
* 存放
*/
private Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>();
/**
*获取bean
*/
public Object getBean(String name) {
return beanDefinitionMap.get(name).getBean();
}
/**
*注册bean
*/
public void registerBeanDefinition(String name, BeanDefinition beanDefinition) {
beanDefinitionMap.put(name, beanDefinition);
}
}
3.测试
public class UserService {
public void queryUserInfo(){
System.out.println("查询用户信息");
}
}
public class ApiTest {
@Test
public void test_BeanFactory(){
/**
* 在单测中主要包括初始化 Bean 工厂、注册 Bean、获取 Bean,三个步骤,使用效果上贴近与 Spring,但显得会更简化。
* 在 Bean 的注册中,这里是直接把 UserService 实例化后作为入参传递给 BeanDefinition 的,
* 在后续的陆续实现中,我们会把这部分内容放入 Bean 工厂中实现。
*/
// 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();
}
}
4.结果




![Rhino犀牛技巧[导出DXF给AD]](https://img-blog.csdnimg.cn/ae24c5514cc741c9a0556b8708e314c0.png)














