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.结果