Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题
。它是一个分层的JavaSE/JavaEE
full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序的开发。

Spring最根本的使命是解决企业级应用开发的复杂性,即简化Java开发。

Spring可以做很多事情,它为企业级开发提供给了丰富的功能,但是这些功能的底层都依赖于它的两个核心特性,也就是依赖注入(dependency
injection,DI)和面向切面编程(aspect-oriented programming,AOP)。

简略核心解释

spring是一个轻量级的开源框架。

spring为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题

spring是一个IOC和AOP的容器框架。

IOC:控制反转

AOP:面向切面编程

容器:包含并管理应用对象的生命周期

使用spring的优点

1、Spring通过DI、AOP和消除样板式代码来简化企业级Java开发

2、Spring框架之外还存在一个构建在核心框架之上的庞大生态圈,它将Spring扩展到不同的领域,如Web服务、REST、移动开发以及NoSQL

3、低侵入式设计,代码的污染极低

4、独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺

5、Spring的IoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦

6、Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式处理,从而提供了更好的复用

7、Spring的ORM和DAO提供了与第三方持久层框架的的良好整合,并简化了底层的数据库访问

8、Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部

9、任何一个语言或者任何一个框架想要立于不败之地,那么很重要的就是它的生态。

spring的模块划分图

模块解释:

Test:Spring的单元测试模块

Core Container:核心容器模块

AOP+Aspects:面向切面编程模块

Instrumentation:提供了class instrumentation支持和类加载器的实现来在特定的应用服务器上使用,几乎不用

Messaging:包括一系列的用来映射消息到方法的注解,几乎不用

Data Access/Integration:数据的获取/整合模块,包括了JDBC,ORM,OXM,JMS和事务模块

Web:提供面向web整合特性

IOC(Inversion of Control):控制反转

基本概念

IoC is also known as dependency injection (DI). It is a process whereby
objects define their dependencies (that is, the other objects they work with)
only through constructor arguments, arguments to a factory method, or
properties that are set on the object instance after it is constructed or
returned from a factory method. The container then injects those dependencies
when it creates the bean. This process is fundamentally the inverse (hence the
name, Inversion of Control) of the bean itself controlling the instantiation or
location of its dependencies by using direct construction of classes or a
mechanism such as the Service Locator pattern.

IOC与大家熟知的依赖注入同理,. 这是一个通过依赖注入对象的过程
也就是说,它们所使用的对象,是通过构造函数参数,工厂方法的参数或这是从工厂方法的构造函数或返回值的对象实例设置的属性,然后容器在创建bean时注入这些需要的依赖。
这个过程相对普通创建对象的过程是反向的(因此称之为IoC),bean本身通过直接构造类来控制依赖关系的实例化或位置,或提供诸如服务定位器模式之类的机制。

解释:

IOC是一种设计思想,在Java开发中,将你设计好的对象交给容器控制,而不是显示地用代码进行对象的创建。

把创建和查找依赖对象的控制权交给 IoC 容器,由 IoC
容器进行注入、组合对象之间的关系。这样对象与对象之间是松耦合、功能可复用(减少对象的创建和内存消耗),使得程序的整个体系结构可维护性、灵活性、扩展性变高。
所谓IOC ,就简短一句话:对象由spring来创建、管理,装配。

为什么使用IOC:

1、接口分离原则ISP(the Interface Segregation Principle ISP)
    模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来
2、依赖倒置原则DIP(the Dependency Inversion Principle DIP)
    具体实现依赖抽象,下层依赖上层。    分离

IOC是DIP的设计原理,DI是IOC的具体实现

 总结

DI与IOC

很多人把IOC和DI说成一个东西,笼统来说的话是没有问题的,但是本质上还是有所区别的,希望大家能够严谨一点,IOC和DI是从不同的角度描述的同一件事,

IOC是从容器的角度描述,

而DI是从应用程序的角度来描述,

也可以这样说,IOC是依赖倒置原则的设计思想,而DI是具体的实现方式

ioc优点

* 集中管理
* 功能可复用(减少对象的创建和内存消耗)
* 使得程序的整个体系结构可维护性、灵活性、扩展性变高
* 解耦

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信