什么是IOC,IOC的优缺点及IOC的应用
IOC,即控制反转,具体介绍如下。
1、定义:控制反转(Inversion of Control,英文缩写为IoC)把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。
2、IOC最大的好处是:
因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拔(有点像USB接口和SCSI硬盘了)。
3、IOC最大的缺点是:
(1)生成一个对象的步骤变复杂了(事实上操作上还是挺简单的),对于不习惯这种方式的人,会觉得有些别扭和不直观。(2)对象生成因为是使用反射编程,在效率上有些损耗。但相对于IoC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高。(3)缺少IDE重构操作的支持,如果在Eclipse要对类改名,那么你还需要去XML文件里手工去改了,这似乎是所有XML方式的缺陷所在。
spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,控制反转一般分为两种类型,依赖注入和依赖查找,依赖什么?为什么需要依赖?注入什么?控制什么?依赖注入和控制反转是一样的概念吗?接触新的知识,小编的脑袋中全是大大的问号,不过没有关系,今天这篇博文,小编主要来简单的介绍一下在spring IOC中依赖注入的方法。
依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性。我们可以从以下几个方面理解:a、参与者都有谁?b、依赖:谁依赖谁?为什么需要依赖?c、注入:谁注入谁?又注入了什么呢?d、控制反转:谁控制谁?控制什么?为什么叫反转呢?存在正转吗?
e、控制反转和依赖注入是同一个概念吗?我们需要弄明白上面的问题,这样对于控制反转和依赖注入的理解有大大的帮助。
首先:第一个问题,参与者都有谁?1)对象2)IOC/DI容器3)某个对象的外部资源
第二问题:依赖,谁依赖谁?为什么需要依赖?依赖嘛,很好理解的,对象依赖于IOC/DI容器,至于为什么要依赖呢?对象需要IOC/DI容器来提供对象需要的外部资源。
第三个问题:注入,谁注入谁?又注入了什么呢?显而易见是IOC/DI容器注入对象,注入了what呢?肯定注入的是某个需要的东西那就是注入对象所需要的资源,肯定不会注入无关紧要的内容,你说呢?
第四个问题:控制反转,谁控制谁?控制什么?为什么叫反转呢?存在正转吗?控制反转,控制什么?肯定是IOC/DI容器控制对象,主要是控制对象实例的创建,反转是相对于正向而言的,那么什么算是正向的呢?考虑一下常规情况下的应用程序,如果要在A里面使用C,你会怎么做呢?当然是直接去创建C的对象,也就是说,是在A类中主动去获取所需要的外部资源C,这种情况被称为正向的。那么什么是反向呢?就是A类不再主动去获取C,而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A类中。
第五个问题:控制反转和依赖注入式同一个概念吗?
依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。
了解了这些基本的概念,弄明白她们之间的联系和区别,能够帮助我们更好的理解,接着小编来重点介绍一下依赖注入,在spring ioc中有三种依赖注入,分别是:
a、接口注入;b、setter方法注入;c、构造方法注入;
接着小编对这三种注入方式一一进行讲解,通过demo的讲解,希望能够帮助小伙伴们更好的理解,不足之处还请多多指教。接口注入
public class ClassA { private InterfaceB clzB; public void doSomething() { Ojbect obj = Class.forName(Config.BImplementation).newInstance(); clzB = (InterfaceB)obj; clzB.doIt(); } …… }
解释一下上述的代码部分,ClassA依赖于InterfaceB的实现,我们如何获得InterfaceB的实现实例呢?传统的方法是在代码中创建 InterfaceB实现类的实例,并将赋予clzB.这样一来,ClassA在编译期即依赖于InterfaceB的实现。为了将调用者与实现者在编译期分离,于是有了上面的代码。我们根据预先在配置文件中设定的实现类的类名(Config.BImplementation),动态加载实现类,并通过InterfaceB强制转型后为ClassA所用,这就是接口注入的一个最原始的雏形。
setter方法注入
setter注入模式在实际开发中有非常广泛的应用,setter方法更加直观,我们来看一下spring的配置文件:
接着我们来看一下,setter表示依赖关系的写法
import com.tgb.spring.dao.UserDao; public class UserManagerImpl implements UserManager{ private UserDao userDao; //使用设值方式赋值 public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public void addUser(String userName, String password) { userDao.addUser(userName, password); } }
构造器注入
构造器注入,即通过构造函数完成依赖关系的设定。我们看一下spring的配置文件:
我们再来看一下,构造器表示依赖关系的写法,代码如下所示:
import com.tgb.spring.dao.UserDao; public class UserManagerImpl implements UserManager{ private UserDao userDao; //使用构造方式赋值 public UserManagerImpl(UserDao userDao) { this.userDao = userDao; } @Override public void addUser(String userName, String password) { userDao.addUser(userName, password); } }
接口注入 && setter注入 && 构造器注入
接口注入:接口注入模式因为具备侵入性,它要求组件必须与特定的接口相关联,因此并不被看好,实际使用有限。
Setter 注入:对于习惯了传统 javabean 开发的程序员,通过 setter 方法设定依赖关系更加直观。如果依赖关系较为复杂,那么构造子注入模式的构造函数也会相当庞大,而此时设值注入模式则更为简洁。如果用到了第三方类库,可能要求我们的组件提供一个默认的构造函数,此时构造子注入模式也不适用。
构造器注入:在构造期间完成一个完整的、合法的对象。所有依赖关系在构造函数中集中呈现。依赖关系在构造时由容器一次性设定,组件被创建之后一直处于相对“不变”的稳定状态。只有组件的创建者关心其内部依赖关系,对调用者而言,该依赖关系处于“黑盒”之中。
IOC的优点:实现组件之间的解耦,提高程序的灵活性和可维护性。
IOC的缺点:
1、创建对象的步骤变复杂了,不直观,当然这是对不习惯这种方式的人来说的。
2、因为使用反射来创建对象,所以在效率上会有些损耗。但相对于程序的灵活性和可维护性来说,这点损耗是微不足道的。
3、缺少IDE重构的支持,如果修改了类名,还需到XML文件中手动修改,这似乎是所有XML方式的缺憾所在。
IOC的应用:
IOC模式将耦合代码从程序中移出,放到统一的XML文件中管理。由IOC容器通过配置文件来管理对象的生命周期、依赖关系等,这样就不用重新修改并编译具体的代码,从而实现组件之间的解耦。
IQC也就是来料检验或进料检验,主要负责公与外购品的进厂检验,文具内除外,做IQC也就是要熟练QC手法,懂流程,ISO,会使用一般量具,如卡尺,千分尺,高度尺等,如果是电子料,还要会用万用表,数电桥,电容,电感仪,如果是经圈还有测圈数的等等,不过都比较简单,设置好量程就能正确显示测量值!
ioc:控制反转又称为依赖注入依赖注入,类与类之间或接口之间的依赖关系并不是在编译时就明确建立的,而是通过某些手段,在运行时建立的. 依赖注入又可分为3种方式:接口注入,设值注入,构造器注入.
ioc是什么意思
IOC的意思是控制反转。详细解释如下:一、IOC基本概念 IOC即控制反转,是一种软件设计原则,主要应用于面向对象编程中。在传统的程序设计中,程序流程通常由开发者自己控制,而在控制反转的思想中,这种控制权被转移到了外部,或者说是被"反转"了。这样做的目的是降低系统各部分之间的耦合度,提高系统的可...
什么是IOC,IOC的优缺点及IOC的应用
IOC,即控制反转(Inversion of Control,英文缩写为IoC),是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。IOC的优点:实现组件之间的解耦,提高程序的灵活性和...
什么是“IOC”?IOC的优缺点及IOC的应用有什么?
IOC,即控制反转(Inversion of Control),是一种设计原则,它将控制权从代码本身转移到外部,通过外部方式来组装和控制对象的行为。IOC的优点主要表现在以下几个方面:1. 降低代码耦合度:通过IOC,对象之间的依赖关系由外部容器来管理,使得代码之间的耦合度大大降低,便于维护和扩展。2. 提高代码复用性...
ioc是什么意思?
IOC是控制反转的缩写。详细解释如下:一、IOC的基本概念 IOC是软件架构中的一种重要概念,主要应用在依赖注入的技术中。它的核心思想是反转了传统程序中的控制流程,将原本在应用程序中直接创建和配置依赖对象的工作,交由外部框架或系统去管理。通过这种方式,IOC实现了应用程序组件之间的解耦,提高了系统的...
什么是“IOC”?IOC的优缺点及IOC的应用有什么?
IOC,即控制反转,具体介绍如下。1、定义:控制反转(Inversion of Control,英文缩写为IoC)把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。2、IOC最大的好处是:因为把对象生成放在了XML里定义,...
什么是IOC,什么时候用IOC ?
从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。IoC中最基本的Java技术就是“反射”编程。反射又是一个生涩的名词,通俗的说反射就是根据给出的类名(字符串)来生成对象。这种编程方式可以...
ioc是什么意思
IOC是计算机科学中的一种设计理念,特别是应用于软件架构和框架设计中。它的核心思想是反转传统的应用程序控制流程,将应用程序的某些控制权“反转”给外部实体,比如框架或容器。这有助于提高系统的灵活性和可维护性。二、IOC的核心思想:控制反转 在传统的应用程序设计中,应用程序本身控制其...
ioc是什么意思
IOC的意思 IOC,即控制反转。它是一个编程和设计模式中的概念,主要应用于软件架构的设计和实现中。在IOC的思想下,传统的应用程序直接依赖的对象创建和管理被转移到一个外部系统或组件中,这个外部系统负责控制程序对象之间的依赖关系,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分开。通过这种...
ioc是什么意思-含义须知
IOC这个缩写有多种意思,比如:控制反转、国际奥林匹克委员会、初始作战能力、政府间海洋学委员会、IBM智慧城市智能运行中心等。01 控制反转(InversionofControl,缩写为IoC)是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(DependencyInjection,简称DI),...
ioc是什么意思
1、ioc是国际奥林匹克委员会的简称。2、国际奥林匹克委员会,简称为国际奥委会,是一个国际性的、非政府的、非赢利的组织。是奥林匹克运动的领导机构,它于1981年9月17日得到瑞士联邦议会的承认,确认其为无限期存在的具有法人资格的国际机构。总部位于瑞士洛桑。由法国人皮埃尔·德·顾拜旦建立,首任主席...
春杰君维: IOC,即控制反转(Inversion of Control,英文缩写为IoC),是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心. 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依...
莆田市15173871373: IOC的含义是什么 - ?
春杰君维: IOC 1.Input /Output Channel [Control] 输入/输出通道[控制]; 2.Input/Output Controller [Converter] 输入/输出控制器[转换器]; 3.Intergovernmental Oceanographic Commission 政府间海洋学委员会(联合国UNESCO); 4.International Olympic Committee 国际奥林匹克委员会; 5.International Oceanographic Commission 国际海洋学委员会 一般指第4个
莆田市15173871373: ioc是什么意思 ioc是什么意思 - ?
春杰君维: Inversion of Control ?你问的是控制反转吗?我知道这个 就是以前创建对象直接在程序代码中new一个,IOC的思想就是把创建对象的工作交给容器,不需要我们在程序中操作 控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转.
莆田市15173871373: IOC是什么意思 - ?
春杰君维: (Inversion of Control)IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器负责将这些联系在一起.1. =input-output channel 输入/输出通道2. =input-output controller 输入/输出控制单元 缩写词 =International Olympic Committee国际奥林匹克委员会 希望对你有帮助.
莆田市15173871373: ioc有两种实现机制 ioc是什么 为什么要ioc - ?
春杰君维: di就是ioc,前者叫依赖注入 dependency injection, 后者是控制反转Inverse of Control, spring的ioc是用aop的方式进行di实现的,往大了方向,模式角度讲,aop是用动态代理模式实现的. 不过你说地也对,可以把ioc认为是在解耦
莆田市15173871373: ioc中文叫什么意思 - ?
春杰君维: IoC就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制.这称为控制反转 http://cache.baidu.com/c?word=ioc&url=http%3A//itexam%2Ecsai%2Ecn/sun/no0103%2Ehtm&b=0&a=1&user=baidu
莆田市15173871373: 大师们,用IOC注入最大的好处是什么? - ?
春杰君维: IoC是什么?Inversion of Control,即反转控制,或许说为依赖注入更为合适.IoC就是IoC,不是什么技术,与GoF一样,是一种设计模式.Interface Driven Design接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定...
莆田市15173871373: 简答spring框架的Ioc的优点? - ?
春杰君维: IOC是指控制反转
莆田市15173871373: 什么是IoC以及理解为什么要使用Ioc - ?
春杰君维: IOC是集成电路的意思.集成电路(integrated circuit)是一种微型电子器件或部件.采用一定的工艺,把一个电路中所需的晶体管、电阻、电容和电感等元件及布线互连一起,制作在一小块或几小块半导体晶片或介质基片上,然后封装在一个管...
莆田市15173871373: 面试题:Spring中IOC和DI的含义.应该怎么答 - ?
春杰君维: ioc就是控制翻转或是依赖注入.通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new 生成你需要的对象,而是通过spring的bean工厂为你长生这样一个对象.aop就是面向切面的编程.比如说你每做一次对数据库操作,都要生成...