依赖注入与控制反转

小说:你知道棣棠花的花语是什么吗?作者:王侯更新时间:2019-04-26字数:18141

“鱼肠剑是透明的吗?”林媚儿微诧,别的武器不说,但是匕类的武器,她还是听过很多传说的。这把透明的匕就是传说中的鱼肠剑?她心念一动,问道:“我听说含光、承影和宵练是透明的剑,却不知道鱼肠也是透明的匕!”。

浙江有木槿的种植基地吗?

“虽然你没有圣衣,不是雅典娜的守护圣斗士,但是你可是我的小妹妹,怎么能输给那些守护圣斗士,这是我专门给你炼制的女神战裙,名为潘多拉的守护,专门为了守护你一人的战裙。
明明自己就是梦貘,但是却硬生生的将梦貘以法相天地的方式凝练出来,然后由这个她凝练出来的梦貘施展出梦貘真身,而她本身却好似保持人类的样子,明明她就是梦貘但是却将自己妖族的形态也就是原本的形态和自己的人类的样子一分为二,实在是玄妙无比。

只有大罗至尊才不再是炮灰,而是一个精英力量,准圣才是高端大气上档次的存在,只要还是大罗境界的话那么在洪荒始终不算天字号的人物。

记得大学开的有一门课是软件工程,而且还是两个学期,可能实践的机会少有的理论可能也只是记住的,比如软件设计的六大原则:单一原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则,但没真正的理解明白为什么要这样。现在毕业也3年多了,项目也接触了几个,还有一些开源的框架,记得在中软给华为做外包时帮悍马其他组的支援了几天,当时还不知道ABP框架,对IOC也只是听说过,并没有理解。当接触了ABP框架才发现,原来当时做的项目就是采用的ABP框架啊。其实像这些设计原则、还有模式这些,主要还是为了系统的高内聚,低耦合。最近在自学javaweb,学javaweb自然不能少了spring,spring的核心就是IOC和AOP,今天主要来说下IOC——Inversion of Control/控制反转。

一、依赖注入DI—Dependency Injection

1.依赖

在说IOC之前先聊下依赖注入,依赖注入可以分两部分一是依赖二是注入。那什么是依赖?不是我自身的但没有就活不下去,人没了空气、水、阳光,那就活不下去。所以人依赖空气、水、阳光。下面代码定义了一个Person和一个CleanAir的类,Person依赖CleanAir。

package com.cyw.Model;

public class Person {

    public Person(CleanAir air) {
        
        this.air = air;
    }
    CleanAir air;
}
View Code
package com.cyw.Model;

public class CleanAir {

}
View Code

 但是有这样一句话世界上唯一不变的就是变化。之前干净的空气不复存在,而Person依赖的不在是CleanAir,而是比CleanAir更有内涵的DirtyAir.如果还是按照上面的方式来,那就需要在增加一个DirtyAir类的同时,还要修改Person,这种强依赖有很大的弊端,一个地方变化引起其他地方也要修改,而且改变的只是Air,但Person也要改变。那怎么样能尽量减少修改的地方呢?于是面向接口的编程出现了。下面是先定义一个接口IAir,类CleanAir实现接口IAir,在Person中不在直接依赖CleanAir,而是依赖接口IAir,这样即使是DirtyAir也只需要修改给Person不同的Air就像了。

package com.cyw.Model;

public interface IAir {

}
View Code
package com.cyw.Model;

public class CleanAir implements IAir {

}
View Code
package com.cyw.Model;

public class Person {

    public Person(IAir air) {
        
        this.air = air;
    }
    IAir air;
}
View Code

2.注入

注入是啥?注入那它之前是没有的,而是塞给它。上面实例化Person的时候我们可以塞给它一个只要实现IAir接口的对象就可以,只是我们这是手动的给,这有点类似代理设计模式,要给代理设置具体对象。

二、控制反转 IOC——Inversion Of Control

上面依赖注入分两部分,当然控制反转也可分两部分。一是控制二是反转。

1.控制

像上面的不管是直接在Person中生命CleanAir属性还是创建一个接口,都是需要在程序New()一个对象出来,是程序控制Air.而IOC呢,它有专门的容器来管理这些对象,控制着他们的创建及生命周期,只要配置下,不用我们在new了。下次如果有CoolAir(冷空气),那只需要增加一个类CoolAir并实现IAir接口就行,然后在配置文件中配置一下,这样多省事。

2.反转

有反转那就有正转。上面的那种通过new来获取依赖的对象,是对象主动找依赖的对象,而IOC是管理着依赖的对象,然后给对象找它所对应的依赖的对象并注入。获取依赖对象的方式改变了,一个是主动一个是被动的。而Spring就是提供了自动注入依赖的功能。

三、个人理解

依赖注入手动注入依赖也算是依赖注入,控制反转呢算是自动注入依赖。手动注入还是需要new来创建对象,还是适应不了以后的变化,控制反转算是更加包容,不需要new创建,只要实现某个接口,IOC会自动注入。如果再往下一步思考,IOC配置的依赖在XML中,Xml中保存的内容都可以理解为字符串,怎么让字符串转换成对象呢,那就需要用到反射。其实这些不管是Java还是C#,思想都是一样的,不管那门语言,只要理解了思想,学习起来也不难,很容易就能上手。

 

编辑:华建卓

发布:2019-04-26 07:27:58

当前文章:http://leetaemin.cn/i0l2f.html

红瑞木冠径是多少? 高寒地区适合种植什么品种的竹子? 碧桃4月份可以种植吗? 花石榴是常绿树吗? 10公分栾树批发基地在哪里? 不会再有“天价”苗木,优质苗木才是明星 剪股颖种植技术容易掌握,只需注意这几点即可 蓝花楹种子几月播种最好?

28184 46909 36563 91991 14064 17174 36619 31170 45151 25008 14082 44252 82924 17437 82221 72100 17685 97422 56292 65330

我要说两句: (0人参与)

发布