Spring源码深度解析(一)

2020-09-03 15:43:00 浏览数 (1)

Spring源码深度解析(一)

一. 主要内容:

  1. 概念描述
  2. Spring整体架构及主要模块概述

二. 概念描述

  1. IoC :Inversion of Control,控制反转。 到底反转了什么? 假设具有依赖关系的对象

如果要调用A的method()方法,而method方法又依赖于B的某些处理。原生方式: A a = new A(); B b = new B(); a.setB(b); a.method(); 程序需要手动创建所需要的对象,且手动维护对象间的依赖。 缺点:

  1. 程序处理复杂,且需要知道对象间的依赖关系;
  2. 对象之间强耦合。

采用IoC方式: A a = IocContainer.getBean("a"); a.method(); 对象之间的依赖关系交由IoC容器去维护,程序直接从容器中获取依赖装配完毕后的对象。获得依赖对象的过程被反转了。

  1. DI:Dependency Injection,依赖注入。 所谓依赖注入,就是由IoC容器在运行期间,动态地将某种依赖关系注入到对象之中。可以理解为DI是实现IoC的策略。IoC和DI本质上是一回事
  2. Spring中的实现 Spring提供了两种类型的IoC容器,分别是面向底层的基础容器BeanFactory和面向用户的扩展的高级容器ApplicationContext。 用户通过XML文件或者注解,定义Bean及其之间的依赖关系。Spring容器启动时,会加载定义好的Bean及其依赖关系,封装成BeanDefinition,并根据容器类型的不同在相应的时机将Bean创建好。用户可以直接通过容器获取所需的Bean,执行相应的操作。

三. Spring整体架构及主要模块概述

  1. Core Container
    1. Beans & Core 是整个Spring的基础支撑模块,所有Spring的模块都在此基础上构建。Beans & Core提供了IoC(控制反转)和DI(依赖注入)的特性,并基于经典的工厂模式和单例模式,抽象了BeanFactory相关的一系列概念。Spring容器中BeanDefinition的加载和解析、Bean的创建、Bean的生命周期管理等功能都在此模块中实现。
    2. Context Context模块构建于 Core 和 Beans模块基础之上,提供了一种类似于JNDI注册器的框架式的对象访问方法 。此外,Context模块继承了Beans的特性,并在其基础上提供了大量的扩展,增加了如事件监听、资源加载、国际化等功能的支持。
    3. Expression Language 提供了强大的表达式语言,支持在运行时查询和操作对象及其相关属性。
  2. Data Access/Integration 提供了对JDBC、JMS、Redis、Mybatis、Hibernate等第三方框架或应用的的整合,简化了数据访问操作。
  3. Web Spring对Web应用的支持。其中最常用的Spring MVC就以经典的MVC模式,提供了Web应用中常用的URL映射、请求参数绑定、结果视图渲染等功能的支持。
  4. AOP AOP模块提供了一个符合 AOP联盟标准的面向切面编程的实现,可以自定义切面和切入点,从而将逻辑代码与需要动态增强的代码分开,降低它们之间的调合性 。
  5. Test Test模块支持使用 JUnit和 TestNG 对 Spring组件进行测试 。

0 人点赞