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控制反转课件.ppt
黑马程序员-SpringCloud-学习笔记01-认识微服务
黑马程序员-SpringCloud-学习笔记-03-Eureka注册中心
spring源码缺失jar。spring-cglib-repack-3.2.5.jar,spring-objenesis-repack-2.6.jar
spring-IOC的一些笔记心得
第1章 控制反转和容器 1.1 使用容器管理组件 1.1.1 问题描述 1.1.2 解决方案 1.1.3 实现方法 1.2 使用服务定位器降低查找组件的复杂性 1.2.1 问题描述 1.2.2 解决方案...
笔记记录分享-笔记记录分享网站-笔记记录分享网站源码-笔记记录分享网站java代码-笔记记录分享网站设计与实现-基于springboot的笔记记录分享网站-基于Web的笔记记录分享网站设计与实现-笔记记录分享项目-笔记记录...
Java-Spring-SpringIoC容器-SpringIoC的学习 SpringIoC容器的学习笔记 主要介绍了IoC容器工作原理以及如何配置IoC容器 通过标签和注解配置容器
Spring系列-控制反转.md
笔记记录分享-笔记记录分享系统-笔记记录分享系统源码-笔记记录分享管理系统-笔记记录分享管理系统java代码-笔记记录分享系统设计与实现-基于springboot的笔记记录分享系统-基于Web的笔记记录分享系统设计与实现-...
spring容器学习笔记
第1章 控制反转和容器 1.1 使用容器管理组件 1.1.1 问题描述 1.1.2 解决方案 1.1.3 实现方法 1.2 使用服务定位器降低查找组件的复杂性 1.2.1 问题描述 1.2.2 解决方案...
七、Spring-笔记
spring.jar spring-aop.jar spring-aop.jar spring-beans.jar spring-hibernate3.jar spring-jdbc.jar spring-struts.jar spring-web.jar
spring-context-3.2.4.RELEASE.jar spring-core-3.2.4.RELEASE.jar spring-beans-3.2.4.RELEASE.jar spring-test-3.2.4.RELEASE.jar spring-web-3.2.4.RELEASE.jar spring-aop-3.2.4.RELEASE.jar spring-webmvc-...
黑马程序员-SpringCloud-学习笔记-02-微服务拆分及远程调用
spring-aop-4.1.6.RELEASE.jar spring-aspects-4.1.6.RELEASE.jar spring-beans-4.1.6.RELEASE.jar spring-context-4.1.6.RELEASE.jar spring-context-support-4.1.6.RELEASE.jar spring-core-4.1.6.RELEASE.jar ...