文档章节

spring --(2)IOC和DI理解

求是科技
 求是科技
发布于 2016/07/25 23:47
字数 823
阅读 43
收藏 0
点赞 0
评论 0

IOC,即控制反转,它是一种设计思想。
举个示例:我们都知道,在java程序中,每个业务逻辑至少需要两个及以上的对象来协作完成,传统的做法是,对象A在使用它的依赖对象时,自己先new object(),然后new 一个依赖对象B,然后再操作A的方法,当然对象B作为方法的参数。我们会发现:对象之间的耦合度比较高,当工程比较大时,这不是一个好现象。IOC的思想是:由spring容器来管理 对象之间的依赖关系,对象只需要关注自己的逻辑业务就行。
如下是更加通俗的解释:IOC,就是spring负责管理对象的生命周期和对象之间的关系。举例,我们在淘宝上买一本书(例如:《spring入门》,xx著作,xx年出版,等等条件),通常的情况是,我们是搜索书名,然后点进去看是不是xx著作的,如果是的话,再看是不是xx年出版的,接着……。这个过程是比较繁琐花时间的,在程序上的做法就是我们自己设计和编码每一个环节,即在对象A(搜索条件:书名)中使用对象B(排除条件:xx著作),就必须new A()对象,依赖类B(xx著作)和类C(xx年出版)来完成任务。那么IOC是怎么完成的呢,即在用户和淘宝之间引入了第三者(官方称之为 工厂类),它是一个条件工具,用户只需要向该工具中输入自己的条件(spring入门、xx著作、xx年出版),然后该工具根据用户的条件进行一系列的操作(官方:由spring初始化类、管理类之间的依赖关系),最后得出该用户所需要的书。更加智能点,用户设置好条件,每次启动系统后,都像用户推送该用户所需要的书,这就是控制反转,即原本应该是由用户来控制的,现在反过来由spring控制,用户只需要结果就行。
DI,即依赖注入。在spring中,系统启动的时候,spring需要处理对象的初始化和对象之间的依赖关系,这个依赖关系就是通过DI来实现的。列举实例:比如对象A需要操作数据库,即对象A依赖数据库对象,原来的做法是,系统启动后,new A()对象,然后在类A中写代码来获得connection对象。spring的做法是:系统启动之前,A告诉spring,需要一个connection对象,(官方:即在spring的配置文件中,先配置好类A和connection类),启动系统后,spring主动向类A推送connection对象,类A不需要知道connection对象是何时被创建的,只需要关注自己的业务,使用connection对象连接数据库就行。那么,DI是如何实现的呢?java 1.3之后有个重要的特性是反射,它允许程序在运行时动态的生成对象、执行对象的方法、设置对象属性的初始值。

© 著作权归作者所有

共有 人打赏支持
求是科技
粉丝 89
博文 453
码字总数 228281
作品 0
成都
后端工程师
Spring IoC & DI

IOC诞生的历史 在没有IoC时,关联不同模块是通过类实例实现的,代码可能是这样子的: 当YourServiceImpl的接口不变时,只需要根据业务需要更换不同的YourService实现类即可。一旦更换实现类时...

classfly ⋅ 06/18 ⋅ 0

SpringBoot的幕后推手...

一、背景   这两年随着微服务的盛行,SpringBoot框架水到渠成的得到了高曝光,作为程序猿的我们,现在要是不知道一点SpringBoot相关的东西,貌似出去找工作都会被深深地鄙视,不过在我们开...

Java工程师-Distance ⋅ 06/01 ⋅ 0

Spring Dependency

我们知道Spring的最重要的核心是Ioc,有时候也被称为DI(Dependency Injection,依赖注入),那么关于Dependency,你了解多少呢? 之前我们有提到IOC和DI的关系与概念,我是把它们区分开了,所...

Real_man ⋅ 05/20 ⋅ 0

谈谈对Spring IOC的理解,转载自http://www.cnblogs.com/xdp-gacl/p/4249939.html

只为成功找方法,不为失败找借口! 谈谈对Spring IOC的理解   学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、D...

武小猪 ⋅ 2017/04/06 ⋅ 0

Spring IOC理解

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

Hosee ⋅ 2016/04/07 ⋅ 0

Spring IOC知识点一网打尽!

前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 单例模式你会几种写法? 工厂模式理解了没有? 在刷Spring书籍的时候花了点时间去学习了单例模式和工...

Java3y ⋅ 05/22 ⋅ 0

Spring入门到精通 依赖注入

一、Spring依赖注入Ioc概述 在这里引入iteye的大牛开涛的博客,对spring框架的ioc的理解,写的非常通俗易懂。 1、Ioc是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种...

Winnie007 ⋅ 2015/10/08 ⋅ 0

Spring IoC(更新中)

概念 IoC(控制反转,也叫依赖注入DI)是Spring的核心,几乎Spring的所有组件都要建立在此基础之上,包括AOP,声明式事务,SpringMVC等等。那么IoC的主要目的是什么呢?两个字“解耦”。为什么...

互联网小龙虾 ⋅ 2014/03/04 ⋅ 0

Dependency Injection-依赖注入详解

点击关注 异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 依赖注入是目前很多优秀框架都在使用的一个设计模式。Java的开发...

异步社区 ⋅ 04/27 ⋅ 0

spring IOC/DI容器的理解

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

君辰 ⋅ 2015/08/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 18分钟前 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 44分钟前 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

C++难点解析之const修饰符

C++难点解析之const修饰符 c++ 相比于其他编程语言,可能是最为难掌握,概念最为复杂的。结合自己平时的C++使用经验,这里将会列举出一些常见的难点并给出相应的解释。 const修饰符 const在c...

jackie8tao ⋅ 昨天 ⋅ 0

聊聊spring cloud netflix的HystrixCommands

序 本文主要研究一下spring cloud netflix的HystrixCommands。 maven <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-clo......

go4it ⋅ 昨天 ⋅ 0

Confluence 6 从其他备份中恢复数据

一般来说,Confluence 数据库可以从 Administration Console 或者 Confluence Setup Wizard 中进行恢复。 如果你在恢复压缩的 XML 备份的时候遇到了问题,你还是可以对整个站点进行恢复的,如...

honeymose ⋅ 昨天 ⋅ 0

myeclipse10 快速搭建spring boot开发环境(入门)

1.创建一个maven的web项目 注意上面标红的部分记得选上 2.创建的maven目录结构,有缺失的目录可以自己建立目录补充 补充后 这时候一个maven的web项目创建完成 3.配置pom.xml配置文件 <proje...

小海bug ⋅ 昨天 ⋅ 0

nginx.conf

=========================================================================== nginx.conf =========================================================================== user nobody; #......

A__17 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部