看《墨攻》理解IoC概念(二 )http://www.qqread.com/erp/3/j380307_3.html

看《墨攻》理解IoC概念(二)

巧巧电脑网络  2007-11-07  IT168 陈雄华    收藏此文 
ioc的三种类型从注入方法上看,主要可以划分为三种的注入类型,分别是构造函数注入、属性注入和接口注入,Spring支持构造函数注入和属性注入。下面我们继续使用以上的例子说明这三种注入方法的区别。 ■ 构造函数注入我们通过客户类的构造函数。


IoC的三种类型
从注入方法上看,主要可以划分为三种的注入类型,分别是构造函数注入、属性注入和接口注入,Spring支持构造函数注入和属性注入。下面我们继续使用以上的例子说明这三种注入方法的区别。

■ 构造函数注入
我们通过客户类的构造函数,将接口实现类通过接口变量传入,如代码清单 3 3所示:
代码清单 3 MoAttack:通过构造函数注入革离扮演者

   
   
public class MoAttack ...{ private GeLi geli; public MoAttack(GeLi geli)...{ ① 注入革离的具体扮演者 this.geli = geli; } public void cityGateAsk() ...{ geli.responseAsk(“墨者革离!”); } }

MoAttack的构造函数不关心具体是谁扮演革离这个角色,只要在①处传入的扮演者按剧本要求完成角色功能即可。
角色的具体扮演者由导演来安排,如代码清单 3 4所示:
代码清单 4 Director:通过构造函数注入革离扮演者

   
   
public class Director ...{ public void direct()...{ GeLi geli = new LiuDeHua(); ① 指定角色的扮演者 MoAttack moAttack = new MoAttack(geli); ② 注入具体扮演者到剧本中 moAttack.cityGateAsk(); } }

在①处,导演安排刘德华饰演革离的角色,并在②处,将刘德华“注入”到墨攻的剧本中,然后开始“城门问答”剧段的演出工作。

■ 属性注入
有时,导演会发现,虽然革离是影片《墨攻》的第一主人公,但并非每场戏都需要革离的出现,通过构造函数方式注入显得很不妥当,在这种情况下,可以使用属性注入进行改造。属性注入通过setter方法完成客户类所需依赖的注入,更灵活,更方便。
代码清单 5 MoAttack:通过setter方法注入革离扮演者

   
   
public class MoAttack ...{ private GeLi geli; public void setGeli(GeLi geli) ...{ ① 属性注入方法 this.geli = geli; } public void cityGateAsk() ...{ geli.responseAsk("墨者革离"); } }

MoAttack在①处为geli属性提供一个setter方法,以便让导演在拍需要革离的戏时才将注入geli的具体扮演者,而不需要刘德华从头到尾跟着墨攻剧组跑。
代码清单 6 Director:通过setter方法注入革离扮演者

   
   
public class Director ...{ public void direct()...{ GeLi geli = new LiuDeHua(); MoAttack moAttack = new MoAttack(); moAttack.setGeli(geli); ① 调用属性setter方法注入 moAttack.cityGateAsk(); } }

和通过构造函数注入革离扮演者不同,在实例化MoAttack时,并未指定任何扮演者,而是在实例化MoAttack后,调用其setGeli()方法注入扮演者。按照类似的方式,我们还可以为剧本中其他如巷淹中,梁王等角色分别提供注入的setter方法,导演即可以根据所拍剧段的不同,注入所需要的角色了。

■ 接口注入
将客户类所有注入的方法抽取到一个接口中,客户类通过实现这一接口提供注入的方法。为了采取接口注入的方式,需要声明一个额外的接口:

   
   
public interface ActorArrangable ...{ void injectGeli(GeLi geli); }

然后,MoAttack实现这个接口并实现接口中的方法:
代码清单 7 MoAttack:通过接口方法注入革离扮演者

   
   
public class MoAttack implements ActorArrangable ...{ private GeLi geli; public void injectGeli (GeLi geli) ...{ ① 实现接口方法 this.geli = geli; } public void cityGateAsk() ...{ geli.responseAsk("墨者革离"); } }
Director通过ActorArrangable的injectGeli()方法完成扮演者的注入工作。
代码清单 8 Director:通过接口方法注入革离扮演者
   
   
public class Director ...{ public void direct()...{ GeLi geli = new LiuDeHua(); MoAttack moAttack = new MoAttack(); moAttack. injectGeli (geli); moAttack.cityGateAsk(); } }
由于通过接口注入需要额外声明一个接口,增加了类的数目,而且它的效果和属性注入并无本质区别,因此我们不提倡这种方式。

相关文章:2007年你需要知道的五大技术

但是来自Amazon和3tera公司的一些新服务也将按需计算的需求方式,带给了中小型企业,这个概念统称被称为托管型硬件或者网格计算。 其中这个过程中的关键因素之一就是虚拟化,其工作方式如下:遵循按需所取的原则,客户可以选择按每小时每虚拟服务器支付10美分的价格来访问虚拟服务器的衍生实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值