之前虽然也手写过spring,不过是写的非常非常基础的版本
这个系列主要是一个学习笔记,最近在看小博哥的渐进式手写Spring
Spring也反反复复学过好几遍了,书籍、视频、源码对主脉络其实很熟悉了,但是对Spring的理解,总感觉差临门一脚,希望通过这次的学习能对Spring有个更加清晰的认识
手写一个非常基础的Bean容器、可以用于定义、存放、获取bean,方便后续持续扩展
定义Bean:BeanDefinition,是你在查阅 Spring 源码时经常看到的一个类,例如它会包括 singleton、prototype、BeanClassName 等。但目前我们初步实现会更加简单的处理,只定义一个 Object 类型用于存放对象。
注册Bean:这个过程就相当于我们把数据存放到 HashMap 中,只不过现在 HashMap 存放的是定义了的 Bean 的对象信息。
获取Bean:最后就是获取对象,Bean 的名字就是key,Spring 容器初始化好 Bean 以后,就可以直接获取了。
├─src├─main│ ├─java│ │ └─cn│ │ └─ljc│ │ └─springframework│ │ BeanDefinition.java│ │ BeanFactory.java│ ││ └─resources└─test└─java└─springframework└─test│ ApiTest.java│└─beanUserService.java
public class BeanDefinition {private Object bean;// 定义Beanpublic BeanDefinition(Object bean) {this.bean = bean;}// 获取beanpublic Object getBean() {return bean;}}
public class BeanFactory {private Map beanDefinitionMap = new ConcurrentHashMap<>();// 获取beanpublic Object getBean(String name) {return beanDefinitionMap.get(name).getBean();}// 注册beanpublic void registerBeanDefinition(String name, BeanDefinition beanDefinition) {beanDefinitionMap.put(name, beanDefinition);}}
public class UserService {public void queryUserInfo(){System.out.println("查询用户信息");}}
@Test
public void test_BeanFactory(){// 1.初始化 BeanFactoryBeanFactory beanFactory = new BeanFactory();// 2.注册 beanBeanDefinition beanDefinition = new BeanDefinition(new UserService());beanFactory.registerBeanDefinition("userService", beanDefinition);// 3.获取 beanUserService userService = (UserService) beanFactory.getBean("userService");userService.queryUserInfo();
}
查询用户信息
一个简单的Bean容器就完成了,已经初具雏形
代码不多,但是重在理解他的思想、设计、方案