【一步一个脚印】从零开始搭建SSM框架-- 3.1 spring 简介

Spring 的主要作用就是为代码“解耦”,降低代码间的耦合度。(所谓耦合度,就相当于复杂度,模块之间的代码侵入情况)

根据功能的不同,可以将一个系统中的代码分为:主业务逻辑 与 系统级业务逻辑 两类。

主业务:代码间逻辑联系紧密,有具体的专业业务应用场景,复用性相对较低;

系统级业务:相对功能独立,没有具体的专业业务应用场景,主要是为主业务提供系统级服务,如日志、安全、事务等,复用性强。

Spring 根据代码的功能特点,将降低耦合度的方式分为了两类:IoC 与 AOP。

spring 特点:

非侵入式

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

容器

Spring 作为一个容器,可以管理对象的生命周期、对象与对象之间的依赖关系。可以通过配置文件,来定义对象,以及设置与其他对象的依赖关系。(就是相当于一个容器,所有类,均放入 spring 容器,进行统一管理)

IoC(注解模式)

控制反转(IoC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。

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

依赖查找:Dependency Lookup,DL,容器提供回调接口和上下文环境给组件,程序代码则需要提供具体的查找方式。比较典型的是依赖于 JNDI 系统的查找。

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

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

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

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

AOP(DAO层等系统级业务)

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

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

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

spring 架构:
【一步一个脚印】从零开始搭建SSM框架-- 3.1 spring 简介
Spring 由 20 多个模块组成,它们可以分为数据访问/集成(Data Access/Integration)、Web、面向切面编程(AOP, Aspects)、应用服务器设备管理(Instrumentation)、消息发送(Messaging)、核心容器(Core Container)和测试(Test)、spel(Spring表达式)

每一个不可分的小方块都是一个 jar 包