控制反转

浅析 Spring IoC

十年热恋 提交于 2019-12-03 12:36:08
1. IoC是什么? IoC(Inversion of Control)即控制反转,不是什么技术,而是一种设计思想 。在Java开发中,IoC 意味着将你设计好的对象交给容器去控制,而不是传统的在对象内部直接控制(比如说 new 一个对象)。 理解好 IoC 的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了“: 谁控制谁,控制什么: 传统Java SE 程序设计,我们直接在对象内部通过 new 创建对象,是程序主动去创建依赖对象;而 IoC 是由 IoC容器来创建这些对象(在容器启动的时,容器会初始化 配置文件中定义的 bean,如果 bean 中添加参数 lazy-init="true" 则不会被创建对象) ; 谁控制谁?当然是 IoC容器控制对象。 控制什么? 主要控制了外部资源获取(不只是对象,也包括文件等。。。) 为何是反转: 传统Java SE 程序设计,我们直接在对象内部通过 new 创建对象,是程序主动去创建依赖对象,也就是正转;而反转则是由容器来创建以及注入依赖对象。下面由两张图说明: 2. IoC 能做什么 传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,增加了维护难度;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,利于功能复用

Spring IOC理解

大兔子大兔子 提交于 2019-11-29 20:24:30
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。 一、分享Iteye的开涛对Ioc的精彩讲解   首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnianshilongnian.iteye.com/blog/1413846 1.1、IoC是什么   Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:   ●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对 象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么

spring 入门及IOC容器

旧时模样 提交于 2019-11-28 20:14:56
Spring 一.Spring,原意“春天”,是一种轻量级容器框架,所谓轻量级就是依赖比较少,侵入性较低,其核心就是 IOC(Inversion of Control)/DI(Dependency Injection) IoC的核心思想是通过消除直接的代码编写并配置需要依赖的服务,来促进松散耦合设计。依赖注入(DI)指的是将一个外部依赖项提供给一个软件组件的过程。这是一种特殊形式的控制反转,其中反转的关注点是获得需要的依赖项的处理。 AOP(Aspect Oriented Programming) 面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 二.IOC容器框架: 图1.1 IOC容器提供了以下服务: AOP,JDBC,事物管理,ORM支持(Hibernate,iBatis等),JMX,JMS,Email 以及对web的集成(对struts的支持,典型的SSH,SSI),如图(图1.1) 三.Spring第一个例子 此实例说明为何使用spring,新建一个java项目 由容器来管理对象之间的依赖关系(而不是对象本身来管理),就叫控制反转

依赖注入和控制反转

走远了吗. 提交于 2019-11-27 14:11:14
IoC——Inversion of Control 控制反转 DI——Dependency Injection 依赖注入 要想理解上面两个概念,就必须搞清楚如下的问题: 参与者都有谁? 依赖:谁依赖于谁?为什么需要依赖? 注入:谁注入于谁?到底注入什么? 控制反转:谁控制谁?控制什么?为何叫反转(有反转就应该有正转了)? 依赖注入和控制反转是同一概念吗? 下面就来简要的回答一下上述问题,把这些问题搞明白了,IoC/DI也就明白了。 (1)参与者都有谁: 一般有三方参与者,一个是某个对象;一个是IoC/DI的容器;另一个是某个对象的外部资源。 又要名词解释一下,某个对象指的就是任意的、普通的Java对象; IoC/DI的容器简单点说就是指用来实现IoC/DI功能的一个框架程序;对象的外部资源指的就是对象需要的,但是是从对象外部获取的,都统称资源,比如:对象需要的其它对象、或者是对象需要的文件资源等等。 (2)谁依赖于谁: 当然是某个对象依赖于IoC/DI的容器 (3)为什么需要依赖: 对象需要IoC/DI的容器来提供对象需要的外部资源 (4)谁注入于谁: 很明显是IoC/DI的容器 注入 某个对象 (5)到底注入什么: 就是注入某个对象所需要的外部资源 (6)谁控制谁: 当然是IoC/DI的容器来控制对象了 (7)控制什么: 主要是控制对象实例的创建 (8)为何叫反转:

控制反转与依赖注入通俗描述

試著忘記壹切 提交于 2019-11-27 00:55:46
控制反转(IOC) : 由框架或其他某些东西来控制需要调用的事件处理器或其他东西,而不是由业务逻辑决定。 举例:spring中的bean,我们在spring项目中配置了datasource后,不需要关注如何调用它,调用它这个工作交给spring,我们只需要关注我们的真正业务。 这样主控被反转了。控制权从业务逻辑中转移到其他地方。数据库操作典型的例子:打开和关闭连接。 IoC的不同实现:1.工厂模式 2.服务定位器模式 3.依赖注入(DI) IoC会确保一个可重用的依赖项会被配置成单例。 依赖注入(DI): 依赖注入是IoC的一种特定形态,是指寻找依赖项的过程不在当前执行代码的直接控制之下。当然我们也可以自己写代码实现依赖注入。 注:把依赖项注入对象的方法有很多种,可以使用专门的DI框架,也可以显示的创建对象实例(依赖项)并把它们传入对象中也可以和框架注入达到同样效果。 DI的几个明显特点:松耦合,易测性,内聚性(专注业务),可重用,代码更少。 发展: JAVA DI标准化方式JSR-330进行统一的规范依赖注入,2009年 JSR-299在300基础上规范企业应用提供标准化配置。实现是 javax.inject。 了解依赖注入机制的内部工作原理可以解决很多常见的问题: 1.依赖项配置错误,2.依赖项诡异的超出作用域,3.依赖项在不该共享时被共享以及分布调试离奇跌机。 javax