1、Spring概述
Spring的主要作用就是为代码“解耦”,也就是降低代码之间的耦合度。
对于系统中的代码我们可以根据功能的不同分为主业务逻辑与系统级服务(系统级业务逻辑)。
(1)、主业务逻辑
主业务代码间逻辑联系紧密,有具体的专业业务应用场景,复用性相对较低。
(2)、系统级业务逻辑
系统级业务相对而言功能独立,没有具体的专业业务应用场景,复用性比较强。
Spring降低耦合度的方式分为两种:IOC与AOP
IOC
IOC(Inversion of Control)控制反转;专注主业务逻辑解耦;
IOC使得主业务逻辑在相互调用的过程中不用再自己维护关系(不用再自己创建要使用的对象),由Spring容器统一管理,自动注入。
AOP
AOP(Aspect Orient Programming)面向切面编程;专注系统及业务逻辑解耦;
AOP使得系统级服务得到了最大的复用且不用再由程序员手工将系统级服务混杂到主业务逻辑中,而是由Spring容器统一注入。
总结
实际上Spring是一个容器,管理着整个程序中所有的Bean的生命周期和依赖关系;
对于降低耦合度来说,针对不同的代码采用不同的降低方式:
(1)IOC降低的是主业务之间的耦合度
(2)AOP降低的是主业务与系统级业务之间的耦合度
模块间的耦合度降低实际上是类与类之间的耦合度降低。
Spring的特点
1、容器:
Spring作为一个容器,可以管理对象的生命周期,处理对象与对象之间的依赖关系,可以通过配置文件来定义对象以及设置与其他对象的依赖关系(可以控制耦合度)
2、IOC:
控制反转(Inversion Of Control),即创建被调用者的实例不是由调用者完成、而是由Spring容器完成,并注入调用者
3、AOP:
面向切面编程(Aspect Orient Programming),是对OOP(Object Orient Programming)面向对象编程的补充和完善。OOP定义从上到下的关系但是并不支持定义从左到右的关系,而AOP作为OOP的补充和完善支持定义支持定义从左到右的关系。实际上AOP的作用是将交叉业务逻辑封装成一个切面,注入到目标对象中去。主要实现:权限管理、日志管理以及事务管理。
2、Spring与IO
IOC控制反转(Inversion Of Control)是一种概念,一种思想,实际上是指将传统上由程序代码直接操控的对象调用权交给容器,通过容器实现对象的装配和管理。
从本质上来讲控制反转是对 对象控制权的转移,从程序代码本身转移到外部容器。
IOC是一种思想,有众多实现方式,比较流行的实现方式:DL依赖查找、DI依赖注入
(1)DL(Dependency Lookup)依赖查找:容器提供回调接口和上下文环境给组件,程序代码则需要提供具体的查找方式
(2)DI(Dependency Injection)依赖注入:程序代码不做定位查询,这些工作由容器自动完成
依赖注入是目前最优秀的解耦方式,依赖注入让Spring与Bean之间以配置文件的方式组织在一起而非以硬编码的方式耦合在一起。
DI依赖注入(Dependency Injection)是指程序运行过程中,若需要调用另一对象协助时,无需再代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序
Spring的依赖注入对调用者与被调用者之间几乎没有任何要求,完全支持POJO之间依赖关系的管理。