关于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,还需要结合实际情况调研决定
最近在同组的一位同事向我提了一下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,还需要结合实际情况调研决定
相关文章推荐
- 关于Spring中的[控制反转]和[依赖注入]的深入理解
- 【Spring】Spring依赖注入与控制反转理解
- 对spring控制反转以及依赖注入的理解
- 关于springIOC控制反转,依赖注入
- 如何理解Spring的控制反转IOC和依赖注入DI思想
- 如何理解Spring的控制反转IOC和依赖注入DI思想
- 对spring控制反转以及依赖注入的理解
- 谈谈对Spring 控制反转(IOC)及依赖注入(DI)的理解
- Spring依赖注入与控制反转理解
- 对spring控制反转以及依赖注入的理解
- 关于IoC(控制反转,依赖注入)的理解
- 个人对于spring依赖注入和控制反转概念的理解
- spring控制反转,依赖注入的理解
- 对spring控制反转以及依赖注入的理解
- spring搭建,为什么用spring,对控制反转,依赖注入的理解
- 【Spring】Spring依赖注入与控制反转理解
- 理解Spring中的依赖注入和控制反转
- spring IOC(控制反转)和DI(依赖注入)以及三种依赖注入方式的比较
- 轻松学,浅析依赖倒置(DIP)、控制反转(IOC)和依赖注入(DI) 依赖注入和控制反转的理解,写的太好了。
- JAVA框架当中Spring的依赖注入和控制反转