文档章节

spring --(2)IOC和DI理解

求是科技
 求是科技
发布于 2016/07/25 23:47
字数 823
阅读 44
收藏 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之后有个重要的特性是反射,它允许程序在运行时动态的生成对象、执行对象的方法、设置对象属性的初始值。

© 著作权归作者所有

共有 人打赏支持
求是科技
粉丝 91
博文 439
码字总数 226317
作品 0
成都
后端工程师
私信 提问
Spring IoC & DI

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

classfly
06/18
0
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
0
三分钟轻松了解Spring框架基础知识

做为一个合格的Java开发人员,你一定听说过Spring框架,虽然会应用,但却未必能够深入理解框架的原理,只是像其它人一样,泛泛的只是停留在理解的层面。小编会带着大家一步步了解Spring框架。...

爱尚实训
07/22
0
0
三条路线告诉你如何掌握Spring IoC容器的核心原理

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

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

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

一只阿木木
08/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
8
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
14
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
14
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
8
0
dubbo 搭建与使用

官网:http://dubbo.apache.org/en-us/ 一,安装监控中心(可以不安装) admin管理控制台,monitor监控中心 下载 bubbo ops 这个是新版的,需要node.js环境,我没有就用老版的了...

小兵胖胖
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部