文档章节

spring IOC/DI容器的理解

 君辰
发布于 2015/08/01 11:38
字数 1796
阅读 149
收藏 16

参与者:应用程序和spring
正向:现在的程序方向,A对象要使用B对象,现在是A里面直接创建B的实例,然后调用。
publc class A{
 void t1(){
 new B().t2();
 
 }
}
public class B{
void t2();

简而言之,就是程序需要什么。就由程序主动去获取需要的资源,这个方向就是正向。
容器是用来创建和装配对象,并管理对象生命周期的。对于应用程序而言,就是被动实例化和被动接受依赖了。
装配:
在spring容器内拼凑bean叫作装配。装配bean的时候,你是在告诉容器,
需要哪些bean,以及容器如何使用依赖注入将它们配合在一起。
IOC/DI思想:
1把程序之间的依赖关系去掉。
2把程序对象设置到IOC/DI容器的配置中,作为Bean
3 由IOC和DI容器来管理Bean的创建,实例化。
4 由IOC/DI容器把Bean之间的关系注入到需要这些关系的对象里面。
简而言之就是对象之间的依赖,全部去掉,然后由IOC/DI容器管理对象和对象之间的依赖关系。
功能:实现了对象之间的松散耦。

1谁控制谁?
IOC/DI容器控制应用程序
2控制什么
  a控制对象本身的创建和实例化和装配
  b控制对象之间的依赖关系
 3为何叫反转?
因为应用程序不能主动的获取外部资源 ,而是被动等待IOC容器给他注入他所需要的资源。所以称为反转。

 

4:哪些方面反转了?
(1)创建对象的地方,spring创建
(2)程序获得资源(比如依赖的其他对象,也就是依赖关系)的方式反了。


5 为何需要反转?
(1)引入了容器过后,整个体系更为松散,而且管理更有序。
(2)类之间的依赖关系真正实现了松散耦合,使得开发测试修改等变得容易。
IOC/DI并没有帮我们实现任何的业务功能,原本该有应用实现的功能,还是有应用自身完成。

7:什么是依赖
 依赖(动词)于注入依赖(名词)关系
 
8 谁依赖于谁?
应用程序依赖于IOD/DI容器。

9为什么需要依赖?
因为反转了过后,应用程序需要的资源都在容器里,所以要依赖容器。

10 依赖什么东西?
应用程序依赖于IOD/DI容器。依赖IOC/DI容器为它注入所需要的资源。(比如:依赖关系)
简写就是:依赖于注入依赖(名词)关系。应用程序依赖IOC注入依赖关系。

11 谁注入谁
IOC/DI容器 注入与应用程序
12注入什么东西?
注入应用程序需要的外部资源,比如依赖关系,常量值什么的

13 为何注入?
因为程序要正常运行,需要这些资源。

14 依赖注入和控制反转是同一个概念吗?
不是同一个概念
其实描述的是同一件事,但是是从不同的角度在说。
控制反转:从IOC/DI的容器来说。容器反过来控制应用程序
依赖注入:是应用程序的角度来说。

15
控制反转的描述:IOC/DI容器反过来控制应用程序,控制应用程序所需要的外部资源,比如依赖关系
依赖注入的描述:应用程序依赖IOC/DI容器,依赖它(容器)注入所需要的外部资源。

16 IOC和DI 是什么?
IOC:是一种使用IOC/DI容器反过来控制应用程序,控制应用程序所需要的外部资源,这是一种程序开发思想
ID:应用程序依赖容器来注入所需的外部资源,是一种开发思想

17能做什么
松散对象的耦合。
使用spring,spring里有实现好的IOC/DI的容器,这样就不用自己去实现
18 怎么做?
可以自己实现,

19 用在什么地方?
凡是程序里面需要使用到外部资源的情况,都可以考虑使用IOC/DI容器
比方说 工厂类,现在就不需要啦。

20强调一下外部资源的概念
 对一个类来讲,所谓外部资源,就是指在自己类的内部,不能得到或实现的东西,比方说在类里读取一个配置文件
 ,那么这个配置文件就相当于这个类的外部资源。
 又比如:A类里面要调用B类的方法,需要在A类获取B类的对象,那么对于A来讲,B就是外部资源。
21 什么是IOC容器
 就是实习IOC思想,并提供对象创建,对象装配以及对象生命周期管理的软件就是IOC容器。
 
 IOC理解:
 1 应用程序无需主动new对象,而是描述对象应该如何被创建,IOC容器帮你创建,即被动实例化
 2 应用程序不需要主动装配对象之间的关系,而是描述需要哪个服务,IOC容器会帮你装配,被动接受装配。
 3 主动变被动。如:别给我们打电话,我们会打给你。
 4 应用程序不知道依赖的具体实现,只知道需要提供某类的服务对象(面向接口):并松散耦合,一个对象
 应当对其他对象尽可能少的了解,不和陌生人说话。
 5 减少类与类之间依赖的设计原则
 
 主动变被动:
 以前是应用程序是主动,现在变成了被动。但是他要告诉IOC容器需要什么资源,然后容器讲资源注入程序。
 应用程序永远是被动的。
 

1 ioc和DI等于工厂吗?
 不等,思想源于工厂,但是高于工厂,IOC/DI的思想是 DI+容器
2跟以前的方式有什么不一样
 反转。去掉了工厂

 
 
 使用IOC/DI容器开发需要改变的思路:
 1应用程序不主动创建对象,但是要描述创建他们的方式。
 2在程序代码中不直接进行服务的装配,但是要描述哪一个组件需要那一项服务,由容器负责将这些装配在一起。
 也就是说:所有的组件都是被动的,组件初始化和装配都由容器负责,应用程序知识在获取相应的组建后,实现
 影响的功能即可。
 
 重点:
 IOC/DI 是思想,不是纯实现技术。IOD是框架共性,只是控制权转转移,转移到框架,所以不能因为实现了IOC就叫IOC容器。
 除了实现IOC外,还要具有DI的功能才叫IOC容器,因为容器除了负责创建并装配组件关系,还需要管理组件的
 生命周期。
 
 

© 著作权归作者所有

粉丝 2
博文 11
码字总数 3064
作品 0
昌平
私信 提问
控制反转和依赖注入的理解(通俗易懂)

学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一...

小橙子的曼曼
03/20
0
0
【Spring】——IoC原理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fjj15732621696/article/details/80869251 在spring的学习总总是有IOC(控制反转)和DI(依赖注入),感觉这两...

DD_Davina
2018/06/30
0
0
Spring之旅第二篇-Spring IOC概念及原理分析

一、IOC概念 上一篇已经了解了spring的相关概念,并且创建了一个Spring项目。spring中有最重要的两个概念:IOC和AOP,我们先从IOC入手。 IOC全称Inversion of Control,中文通常翻译为“控制...

花漾年华
04/30
0
0
三条路线告诉你如何掌握Spring IoC容器的核心原理

一、前言 前三篇已经从历史的角度和大家一起探讨了为什么会有Spring,Spring的两个核心概念:IoC和AOP的雏形,Spring的历史变迁和如今的生态帝国。本节的主要目的就是通过一个切入点带大家一...

Java小铺
2018/08/27
0
0
案例认识 Spring IOC

本文spring libs 地址:https://github.com/yizhiamumu/springlibs Spring 能帮我们做什么 ①.Spring 能帮我们根据配置文件创建及组装对象之间的依赖关系。 ②.Spring 面向切面编程能帮助我们...

一只阿木木
2018/08/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android ANR原理分析

一、概述 ANR(Application Not responding),是指应用程序未响应,Android系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有效响应或者响应时间过长,都会造成ANR...

天王盖地虎626
6分钟前
0
0
IT兄弟连 Java语法教程 Java开发环境 安装JDK

因为我们要开发Java程序,所以必须在我们的计算机中安装Sun(Oracle)公司提供给我们的JDK。目前最新版本的JDK是JDK 10,但是我们以学习JDK 8为主,所以我们要安装的版本是JDK 8。安装步骤如...

老码农的一亩三分地
11分钟前
0
0
Spring Boot Repository查询条件关键字

查询条件关键字 Keyword Sample JPQL snippet And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2 Or findByLastnameOrFirstname … where x.lastname = ?1 or......

兜兜毛毛
18分钟前
0
0
[js]closeure闭包

// // closure 1 function func() { var count = 0; function cal(){ count += 2; console.log(count); return count; ......

Danni3
18分钟前
0
0
centos 设置hostname

1、centos 6 hostname配置文件为 /etc/sysconfig/network 内容为 NETWORKING=yesHOSTNAME=test_hostname hostname是Linux系统下的一个内核参数,它保存在 /proc/sys/kernel/hostname 下,但......

燃犀
44分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部