# lb-spring-framework-full **Repository Path**: lixiaobin2018/lb-spring-framework-full ## Basic Information - **Project Name**: lb-spring-framework-full - **Description**: 手写Spring,较为完整版本。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2019-04-15 - **Last Updated**: 2020-12-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 手写Spring笔记 1. IoC容器内`Bean`默认是单里的,主要是为了方便管理。如果`Bean`是延迟加载的话,则 会在调用`getBean()`方法的时候才会放入IoC容器,否则在IoC容器初始化的时候就会直接 放入IoC容器内。这里是调用`DefaultListableBeanFactory`的`preInstantiateSingle()`方法。 2. `BeanDefinition`再放入IoC容器之前会被封装成BeanWrapper(包装器模式),`BeanWrapper`中有两个重要的方法: - `getWrappedInstance()`得到单例的BeanDefinition - `getWrappedClass()`得到普通的BeanDefinition 3. Spring手写过程中,`AbstractApplicationContext`类中重要方法:`refresh()`,`BeanFactory`中重要方法`getBean()`, registryBeanClasses是一个List,用来存储扫描到的包中类的名字。 4. 真正的IoC容器中存的是BeanWrapper,DefaultListableBeanFactory中存的是BeanDefinition他可以看成是个伪容器。 5. `HandlerMapping`是一个List保存着Url和(Handler)Method的对应关系,通过`HandlerMapping`找到一个chain执行器链; `HandlerAdapter`负责url和Method之间的转化,并执行method,其中包括方法参数的适配、处理,将请求来的参数转化成方法可以识别的参数。 6. Spring Aop 中 `interceptorsAndDynamicMethodMatchers`,他将Service中的方法作为key,然后该方法之前要执行的before方法,和之后的after方法组成一个chain,实现aop的代理执行。 7. `MethodInvocation`中`proceed`方法执行拦截器链,触发其中的involve()方法;