Skip to content

一、Spring 框架

Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转(IoC)和面向切面编程(AOP)。简单来说,Spring 是一个分层的 Java SE/EE full-stack(一站式)轻量级开源框架。

Spring 框架最初是由 Rod Johnson 编写的,并且 2003 年 6 月首次在 Apache 2.0 许可下发布。

Spring 框架是 Java 应用最广的框架, 它的成功源于理念,而不是技术本身,它的理念包含

IoC 使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了。而是由 Spring 容器统一管理,自动“注入”。

AOP 使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务“混杂”到主业务逻辑中了,而是由 Spring 容器统一完成“织入”。

二、Spring 作用

  • Spring 使Java编程变得更快、更简单、更安全。Spring对速度、简单性和生产力的关注使其成为世界上最流行的Java框架。

  • Spring框架附带的工具,并获得了很多现成的解决方案的好处,而且不必担心编写大量额外的代码,从而真正节省了我们的时间和精力。

  • 主要作用就是为代码“解耦”,降低代码间的耦合度

三、Spring 体系结构

Spring 由 20 多个模块组成,它们可以分为

  • JDBC (Java Database Connectivity Java数据库连接)

    例如:Spring JDBCJava JDBC

  • ORM (Object RelationShip Mapping 对象关系映射)

    例如:Spring 集成了各种如 MybatisHibernate已被淘汰

  • OXM

  • JMS

  • Transaction

  • WebSocket TCP 协议进行通信
  • Servlet
  • Web

    例如: Spring MVC 就是对 WEB 最好诠释。、Struts2

  • Protlet

集成了面向切面编程功能(AOP 把一个业务流程分成几个部分),每一个部分单独处理,然后把它们组装成完成的业务流程。 提醒:每一个部分被称为切面。

例如:权限、日志记录、业务处理

  • Beans

    主要组件 BeanFactory, 创建 JavaBean 的工厂, 使用控制反转(IOC)模式,将应用程序的配置和依赖性规范与实际的应用程序代码分开。

  • Core

    Spring 核心,主要Spring 容器

  • Context

    一个核心配置文件,为 Spring 框架提供上下文信息

  • spEL

    用于jsp 页面的将对象数据进行绑定到页面表达式语法。

Spring 集成了测试框架例如:Junit

四、Spring 特点

Spring 框架的 API 不会在业务逻辑上出现,即业务逻辑是 POJO(原生Java对象)。由于业务逻辑中没有 Spring 的 API,所以业务逻辑可以从 Spring 框架快速的移植到其他框架, 即与环境无关。

Spring 作为一个容器,可以管理对象的生命周期、对象与对象之间的依赖关系。可以通过配置文件,来定义对象,以及设置与其他对象的依赖关系。

  • 控制反转(Inversion of Control),即创建被调用者的实例不是由调用者完成,而是由 Spring 容器完成,并注入调用者。 当应用了 IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。 即,不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

  • IoC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式有两种: 依赖注入依赖查找。依赖注入方式应用更为广泛。

    • 依赖查找(Dependency Lookup,DL): 容器提供 回调接口上下文环境 给组件,程序代码则需要提供具体的查找方式。

      比较典型的是依赖于 JNDI 系统的查找。

    • 依赖注入(Dependency Injection,DI): 程序代码不做定位查询,这些工作由容器自行完成

      依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。

  • Spring 的依赖注入对调用者与被调用者几乎没有任何要求,完全支持 POJO 之间依赖关系的管理。

  • 依赖注入是目前最优秀的解耦方式。依赖注入让 Spring 的 Bean 之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的。

  • 面向切面编程(AOP,Aspect Orient Programming),是一种编程思想,是面向对象编程 OOP 的补充。很多框架都实现了对 AOP 编程思想的实现。Spring 也提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如日志和事务管理)进行开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责其它的系统级关注点,

    例如: 日志或事务支持。

  • 我们可以把日志、安全、事务管理等服务理解成一个“切面”,那么以前这些服务一直是直接写在业务逻辑的代码当中的,这有两点不好:首先业务逻辑不纯净;其次这些服务被很多业务逻辑反复使用,完全可以剥离出来做到复用。那么 AOP 就是这些问题的解决方案, 可以把这些服务剥离出来形成一个“切面”,以期复用,然后将“切面”动态的“织入”到业务逻辑中,让业务逻辑能够享受到此“切面”的服务。