【Spring揭秘】------ 第二章学习 Ioc的基本概念

幸福和欢乐在于奋斗,而最有价值的是为梦想而奋斗


2.1 我们的理念是:让别人为你服务

Ioc(Inversion of Control/控制反转)是近年轻量级容器(Lightweight Container)兴起而逐渐进入大家眼帘的名词,又有别名称为依赖注入(Dependency Injection)。有一句非常有意思的话"Don't call us,we will call you."恰如其分的表达了“反转”的意味。这话中文意思“你不用找我们,我们会找你的”。。。。。感觉背部一阵阴风吹过!

Ioc提供了比原本更加轻松简单的方式,它的反转体现在不需要事必躬亲,转变为尽情的享受服务  -- 从此翻身当奴隶。。。。。。

通常情况下,被注入对象会直接依赖于被依赖对象。但是,在Ioc场景中,所有的被注入对象由IoC Service Provider统一管理。被注入的对象需要什么,直接跟IoC Service Provider招呼一声,后者就会把相应的被依赖对象注入到被注入对象中,从而达到IoC Service Provider为被注入对象服务的目的。

IoC简单来讲就一句话!原本是需要什么东西自己去拿,现在是需要什么东西就让别人送过来。

书上有个图我觉得蛮好玩的,截下来了:

以前单身的时候总是要自己去拿衣服,穿上再出门,结婚以后一个眼神就让老婆给你拿来衣服,还给你穿好,然后你给她一个吻在出门 (*^__^*) ,惬意的幸福生活!

2.2 手语,呼喊,还是心有灵犀

书上说道:IoC最权威的总结和解释,是Martin Fowler的文章“Inversion of Control Containers and the Dependency Injection pattern”,文章中提到了三种注入方式,我们下面就去看看

2.2.1 构造方法注入(constructor injection)

构造方法中声明依赖对象的参数列表,让IoC容器知道它需要哪些依赖对象。

此方法比较直观,对象构造完成后,即进入就绪状态,可以马上使用。

2.2.2 setter方法注入(setter injection)

只需要为依赖对象所对应的属性添加setter方法,就可以通过setter方法将相应的依赖对象设置到被注入对象中。

比构造方法注入宽松一些,可以在对象构造完成后再注入。

2.2.3 接口注入(interface injection)

被注入对象如果想要IoC Service Provider为其注入依赖对象,就必须实现某个接口。这个接口提供一个方法,用来为其注入依赖对象。IoC Service Provider最终通过这些接口来了解应该为被注入对象注入什么依赖对象。

接口注入比较死板和繁琐,是现在不甚提倡的一种方式,“退役”选手。

2.2.4 三种注入方式的比较

接口注入:入侵性太强,和上面提到的一样,”退役“,随风而去吧

构造方法注入:主要说下缺点:当依赖对象比较多的时候,构造方法的参数列表会比较长,通过反射构造对象的时候,对相同类型的参数的处理会比较困难,维护和使用上也比较麻烦。

setter方法注入:描述性比较好,可以被继承,允许默认值设置,事实上就是目前最好的赶脚。

2.3 IoC的附加值

先说说IoC好处,低侵入性、可测试性、可重用性和可扩展性等等。。这个仿佛生物进化一般,敲着敲着我们肯定会抽离出某些部分,方便我们更好的开发。

2.4 小结

讲到了IoC的概念,几种依赖注入的方式,理论比较多,适合看看,了解并消化理解。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值