Spring概述
Spring简介
Spring 是分层的 full-stack(全栈) 轻量级开源框架,以 IoC 和 AOP 为内核,提供了展现层 SpringMVC 和业务层事务管理等众多的企业级应⽤技术,还能整合开源世界众多著名的第三⽅框架和类库,已经成为使⽤最多的JavaEE 企业应⽤开源框架。
Spring核心结构
Spring是⼀个分层⾮常清晰并且依赖关系、职责定位⾮常明确的轻量级框架,主要包括⼏个⼤模块:数据处理模块、Web模块、AOP(Aspect Oriented Programming)/Aspects模块、Core Container模块和 Test 模块,如下图所示,Spring依靠这些基本模块,实现了⼀个令⼈愉悦的融合了现有解决⽅案的零侵⼊的轻量级框架。
Spring中最核心的就是IoC和AOP
IoC思想
基本概念
-
IoC:Inversion of Control,控制反转,它是一种思想,而不是一种具体的技术实现
- 控制:对象创建,也就是实例化以及管理的权利
- 反转:控制权交给外部环境了(Spring框架,IoC容器)
-
主要描述的是JAVA开发领域,对象创建和管理的问题
思想解释
- 举例说明:
传统开发⽅式:⽐如类A依赖于类B,往往会在类A中new⼀个B的对象
IoC思想下开发⽅式:我们不⽤⾃⼰去new对象了,⽽是由IoC容器(Spring框架)去帮助我们实例化对象并且管理它,我们需要使⽤哪个对象,去问IoC容器要即可
我们丧失了⼀个权利(创建、管理对象的权利),得到了⼀个福利(不⽤考虑对象的创建、管理等⼀系列事情)
IoC最终解决的是对象之间耦合的问题
IoC与DI的区别
DI的基本概念
- DI:Dependancy Injection(依赖注⼊)
- 其实DI和IoC描述的是同一件事情(对象的实例化,管理,及依赖关系维护这件事情),只是角度不同。IoC是站在对象角度来说的,对象的控制权被反转了,反转交给了IoC容器;而DI是站在IoC容器角度来说的,容器会把被依赖对象,注入(通俗的说就是“送进去”)到依赖它的对象中去。
AOP
AOP的基本概念
- AOP: Aspect oriented Programming ⾯向切⾯编程/⾯向⽅⾯编程
AOP要解决的问题
- 横切逻辑
看一段代码:
在上面的eat和run方法中,都有各自的业务逻辑,但是如果我们要加入一个性能统计的功能,就会在多个方法中出现重复的代码,并且OOP下几乎无法解决这个问题。
这种在多个纵向流程中出现了相同的子流程的代码,称之为横切逻辑代码。
AOP就是要解决横切逻辑代码抽取的问题。将横切逻辑代码与真正的业务逻辑代码分离:
在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复。
怎么理解“面向切面”
- 切:指的是横切逻辑,真正逻辑代码无法处理,只能处理横切逻辑,所以叫面向横切逻辑。
- 面:横切逻辑往往在多个方法中出现,每一个出现的地方好比一个点,多个点就组成了面。