IOC - 控制反转:是一个设计原则
用来对组件之间的关系进行解耦,Spring提供了一个IOC的实现, Spring Core-IOC容器来管理组件
IOC 是一个通用的设计原则,DI(依赖注入)是具体的设计模式,它体现了IOC的设计原则
1.问题:OOP将系统分解成了一组可重用的对象,如果没有一个核心模块来管理(创建和管理)这些对象,这些对象就会仅仅的耦合在一起
1.解决方法:创建一个容器来管理,运行于容器里的对象为组件
1. 实现方法:
1.1使用接口
1.1.1问题:如果只使用接口,则对象的实现(注入)是硬编码
1.1.1解决方法:采用容器(管理对象即管理负责组成系统的组件)
1.1.2问题:如果采用了容器,那么容器负责创建了需要的所有对象(产生了依赖),并且使用类(Service类)需要容器的实例(和容器产生了依赖,并且通过字符串来说明需要具体使用哪个对象,这里是硬编码)
--(1.1.2解决方法:配置文件,将依赖从代码中转移到配置文件,容易修改和维护)
1.2问题:采用了容器,则还需要代码从容器中查找出自己所需的组件,如果更换了容器,则这些代码就需要改变
1.2解决方法:采用JEE模式--服务定位器(Service Locator),将查找请求委托给服务定位器
1.2.1 实现:Service--调用具体对象的接口,则具体对象的注入流程:通过 ServiceLocator--Container--具体实现
IOC和DI的应用
1.3问题:组件依赖其它组件,需要主动执行查找
1.3解决方法:通过 DI 来,如setter实现,容器主动为每一个组件注入必须的资源(对象),组件不需要主动查找,即Don't call us,we'll call you
不同的DI实现
1.4 setter方法,构造器注入
setter方法缺点:
1). 如果组件使用者忘记注入它所需的依赖,则会发生NullPointException,并且这种情况很难调试
2).setter注入存在安全风险,无法保证setter调用后,再次被调用而更改依赖
构造器注入PS:提供构造器之后,java将不提供默认的构造器
1.5使用配置文件配置容器
1.5.1问题:使用java代码来配置依赖关系,效率低
1.5.2解决方法:基于配置文件
1.5.3实现方法:创建配置文件--容器读取并管理组件
相关推荐
Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- ...
(用户持久化类)重构第一步——面向接口编程 8 重构第二步——工厂(Factory)模式 9 重构第三步——工厂(Factory)模式的改进 10 重构第四步-IoC容器 11 控制反转(IoC)/依赖注入(DI) 11 什么是控制反转...
**Spring技术--IOC控制反转** 在Java开发领域,Spring框架以其...总之,Spring的IOC技术通过控制反转和依赖注入,提高了代码的可维护性和可扩展性,降低了系统复杂性,是现代Java企业级应用开发中不可或缺的一部分。
黑马程序员-SpringCloud-学习笔记01-认识微服务
黑马程序员-SpringCloud-学习笔记-03-Eureka注册中心
通过上述示例,我们可以清晰地看到控制反转和依赖注入的概念及其在Spring.NET中的具体应用。利用Spring.NET框架提供的IoC容器,不仅可以大大降低模块之间的耦合度,还能提高代码的可读性和可维护性。这对于构建复杂...
### Spring自学笔记-Ioc(控制反转)容器 #### 一、Spring框架简介 Spring框架是一个开源的Java平台,用于构建企业级应用。它提供了一种轻量级的方式来管理应用程序的各种组件和服务,使得开发者能够更容易地构建...
"spring-framework-master"这一压缩包包含了Spring框架的完整源码,为我们提供了深入理解这一强大工具的绝佳机会。 Spring的核心设计理念是依赖注入(Dependency Injection,简称DI),它通过反转控制(Inversion ...
标题中的"spring-cglib-repack-3.2.5.jar"和"spring-objenesis-repack-2.6.jar"是Spring框架在运行时依赖的两个关键库,它们主要涉及到动态代理和对象创建的优化。 1. **CGLIB(Code Generation Library)**: ...
IoC(Inversion of Control,控制反转)容器是Spring框架的核心组件之一,它负责管理应用程序中的对象关系和依赖关系。IoC容器提供了一个_centralized_registry_,用于存储和管理应用程序中的对象。 依赖注入 ...
2. **spring-context**:扩展了spring-beans,引入了ApplicationContext接口,提供了一种更高级的容器,可以处理国际化、事件传播、资源加载等功能。 3. **spring-aop**:提供了AOP功能,包括定义切入点、通知、...
黑马程序员-SpringCloud-学习笔记-02-微服务拆分及远程调用
- **依赖注入与控制反转**:Spring的核心功能之一是依赖注入(DI),这是一种设计模式,用于实现松耦合的应用程序组件。控制反转(IoC)容器负责管理对象的生命周期和配置,从而实现了依赖注入。 - **框架模块**: ...
spring-IOC的一些笔记心得
3. **Spring Context**:`spring-context-4.2.5.RELEASE.jar`扩展了Spring Core的功能,提供了一个应用上下文,它是bean的容器,可以管理和查找bean,并且支持消息处理、AOP(Aspect Oriented Programming,面向切面...
然而,有时候在导入Spring项目时,可能会遇到一些问题,例如标题中提到的"spring-cglib-repack-3.2.4.jar"和"spring-objenesis-repack-2.4.jar"这两个jar包的缺失。这些jar包对于Spring框架的正常运行至关重要,因为...
第1章 控制反转和容器 1.1 使用容器管理组件 1.1.1 问题描述 1.1.2 解决方案 1.1.3 实现方法 1.2 使用服务定位器降低查找组件的复杂性 1.2.1 问题描述 1.2.2 解决方案...
例如,关于IoC(Inversion of Control,控制反转)的实现,Spring使用了XML配置或注解来定义bean的依赖关系,通过反射机制动态加载和管理bean。另外,AOP模块实现了切面编程,允许我们定义横切关注点,如日志、事务...
Spring系列-控制反转.md