您的位置:首页 > 编程语言 > Java开发

关于Spring的控制反转、依赖注入等的理解

2013-10-28 10:11 447 查看
(本文只是我对Spring的一点很肤浅的理解,写的有点狗屎了,鄙人小学作文长期不及格的水平,看官朋友如果觉得很繁琐请忽略,切勿因为本文让您觉得烦躁,那就罪过了)

最近在同组的一位同事向我提了一下Spring的好处,他们之前的项目组都用Spring来管理对象,用起来非常方便。之前我也看过一点Spring的介绍,觉得它就是利用了Java的反射,通过配置文件来配置一下对象,实在看不出有多高明之处。鄙人实在是愚钝至极。

今天刚好上一个项目完了,事情不是很多,就搜了点Spring的资料来看看,了解一下Spring。

参考:http://wenku.baidu.com/view/8d573876a417866fb84a8e78.html

突然才恍然大悟,正是由于利用配置文件来管理对象,实现了代码中的解耦。

参考的文章中举了一个士兵使用枪支消灭敌人的例子。

最原始的的方法,是直接硬编码两个类:士兵(Soldier )和 枪(gun),在士兵类中有个战斗的方法,调用枪的消灭敌人方法。

这其中士兵类 用到了 枪的方法,就叫做 士兵 依赖了 枪。(依赖关系)

如果需求发生了变化,士兵要用炮消灭敌人,那这是就只有去改代码了,修改依赖关系 枪。

不过好在我们有设计模式,可以将枪、炮 这些变化的东西都封装起来,抽象成武器接口,士兵类只去操作接口就行了。(封装变化)

这样好了,这下可以应对需求的变化了,如果你需要士兵开飞机去消灭敌人,那就写一个飞机类,实现武器接口,士兵类中实例化武器对象的时候 去实例化 飞机就OK 了。

噢,这个时候有新的需求来了,还是要去修改代码的,要在调用依赖方法的地方将依赖绑定到具体的类上,(具体被依赖对象的实例化,需要调用类来控制)能不能再方便一点呢?(控制反转)

(这是从百度百科上摘下来的一句话,讲到了对象依赖控制的问题:许多非凡的应用(比HelloWorld.java更加优美,更加复杂)都是由两个或是更多的类通过彼此的合作来实现业务逻辑,这使得每个对象都需要,与其合作的对象(也就是它所依赖的对象)的引用。如果这个获取过程要靠自身实现,那么如你所见,这将导致代码高度耦合并且难以测试。)

OK,Spring解决了这个问题,还是继续上面士兵和枪的例子,在士兵类中增加一个setter方法,将武器的对象set到士兵类中,作为士兵对象的一个属性。

Spring在控制具体逻辑的时候,只需要将具体的对象注入到士兵类中,而士兵类只需要根据接口调用方法。这样完美的完成了系统的解耦,实现了依赖注入和控制反转,在应对新的需求时,获得了极大的灵活性。

例如,新来一个需求,士兵要发射导弹来消灭敌人,只需要新增一份导弹的类,继承武器接口。把它放到classpath中,然后在Spring的配置文件中将这个类的对象设置到士兵类中,OK,不用修改一点原来的代码,就可以完成新功能的添加,是不是很嗨呀~~~~

Spring使用了很经典的面向对象思想,使用Spring也可以让你不自觉的对变化进行封装,抽象接口。

Spring的内容远不止这点,鄙人也打算在今后的学习中继续深入的学习

在自己的项目中如何使用Spring,还需要结合实际情况调研决定
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: