# spring-demo **Repository Path**: jaggery_admin/spring-demo ## Basic Information - **Project Name**: spring-demo - **Description**: 简化版的 Spring 框架,快速熟悉 Spring 源码和掌握 Spring 的核心原理。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-05-25 - **Last Updated**: 2024-07-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring源码 ## 基础篇:IoC ### 最简单的Bean容器 定义一个简单的bean容器BeanFactory,内部包含一个map用以保存bean,只有注册bean和获取bean两个方法 ```java public class BeanFactory { private Map beanMap = new HashMap<>(); public void registerBean(String name, Object bean) { beanMap.put(name, bean); } public Object getBean(String name) { return beanMap.get(name); } } ``` 测试: ```java public class SimpleBeanContainerTest { @Test public void testGetBean() throws Exception { BeanFactory beanFactory = new BeanFactory(); beanFactory.registerBean("helloService", new HelloService()); HelloService helloService = (HelloService) beanFactory.getBean("helloService"); assertThat(helloService).isNotNull(); assertThat(helloService.sayHello()).isEqualTo("hello"); } class HelloService { public String sayHello() { System.out.println("hello"); return "hello"; } } } ``` ### BeanDefinition 和 BeanDefinitionRegistry 主要增加如下类: - BeanDefinition,顾名思义,用于定义Bean信息的类,包含Bean的class类型、构造参数、属性值等信息,每个Bean对应一个BeanDefinition的实例。简化BeanDefinition仅包含Bean的class类型 - BeanDefinitionRegistry,BeanDefinition注册表接口,定义注册BeanDefinition的方法 - SingletonBeanRegistry及其实现类DefaultSingletonBeanRegistry,定义添加和获取单例Bean的方法 Bean容器作为BeanDefinitionRegistry和SingletonBeanRegistry的实现类,具备两者的能力。向Bean容器中注册BeanDefinition后,使用Bean时才会实例化。 ![bean-definition-and-bean-definition-registry](./assets/bean-definition-and-bean-definition-registry.png)