Spring核心(二)IoC介绍
来源:互联网 发布:淘宝怎么没有朋友代付 编辑:程序博客网 时间:2024/06/05 09:31
IoC控制反转模式(也称作依赖性注入DI)是Spring的核心,他的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。Spring中的IoC容器负责将这些联系在一起。在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,由容器来决定什么时间调用方法。
控制反转(loc):控制权的转移。
通过例子来理解一下:
假如我要回家,Dao层可以选择多种方法
Public class ByBus{ Public void gohome(){ System.out.println(“坐公交车”); }}
Public class Cycle{ Public void gohome(){ System.out.println(“骑自行车”); }}
业务层,如果选择坐车,那么:
Public class GoWhere{ Public void Gohome(){ ByBus byBus=new ByBus(); byBus.gohome(); }}
在GoWhere类的设计中,回家的需求依赖于实际的ByBus对象,如果要将方法改为骑自行车则必须要修改Go这个类。
DI----依赖倒转原则是:程序不应该依赖于实现,而是要依赖于抽象接口。
所以如果我们在设计系统的过程中,对业务进行抽象,抽出一个接口:
Public interface Ivehicle{ Public void gohome();}
然后ByBus和Cycle类都实现Ivehicle接口,在此就省略不贴代码了。
下面是重新设计GoWhere类,回家的方法可设计为依赖Ivehicle接口,而不依赖于实际的ByBus和Cycle。
Public class GoWhere{ Private Ivehicle vehicle; Public void setVehicle(Ivehicle vehicle){ This.vehicle=vehicle; } Public void Gohome(){ Vehicle.gohome(); }}
按照这样的设计方式,GoWhere类是可以重用的。这样,在表示层,如果选择坐车回家,则可以写为:
GoWhere goWhere=new goWhere();goWhere.setVehicle(new ByBus);goWhere.Gohome();
如果选择骑车回家,则写为:
GoWhere goWhere=new goWhere();goWhere.setVehicle(new Cycle);goWhere.Gohome();
由此可以看出,无论底层的存储如何变化,对于GoWhere类来说都不用修改。修改的只是客户端。
我们可以编写一个配置文件,在配置文件中对所需的对象进行配置,这样的话,连客户端的代码都不用修改,就可以方便的更换方法。
其实,Spring的核心容器IOC就是提供的这样对象的配置管理功能。
Spring中IOC的基本概念是:基于OO设计原则的TheHollywood Principle:Don’t call us, we’ll call you(别找我,我会来找你的)。程序中各个组件之间的关系,不由程序代码直接操控,而由容器控制。控制权由应用代码中转到了外部容器,即所谓的反转。也就是说对象的控制权转交给spring容器。
下篇文章介绍Spring中IOC的使用方法,看看上文中的例子用Spring管理后会有什么变化。
- Spring核心(二)IoC介绍
- Spring核心(二)IoC介绍
- Spring入门介绍-IOC(二)
- Spring入门介绍-IOC(二)
- 【Spring】IOC核心源码学习(二):容器初始化过程
- 【Spring】IOC核心源码学习(二):容器初始化过程
- Spring核心组件-IOC的介绍
- spring框架(二)——spring概述与spring的核心之IOC
- Spring IOC(二)
- Spring(二、Spring IOC)
- Spring核心(三)IoC使用
- Spring核心(三)IoC使用
- Spring IOC核心源码学习(一)
- Spring IOC核心源码学习(一)
- Spring核心(ioc控制反转)
- Spring IOC核心源码学习(一)
- Spring核心机制(依赖注入IOC)
- Spring核心知识(IOC/DI、AOP)
- 孔乙己学C语言(10)
- 【iOS-Cocos2d游戏开发】cocos2d 坐标系使用
- linux简单命令使用
- 怎么样延长后台网站管理登录进去的界面
- 一个简单的将GUI程序的log信息输出到关联的Console窗口中
- Spring核心(二)IoC介绍
- zoj1712 Skew Binary
- Android 4.0 截屏(Screenshot)代码流程小结
- 关于html中块级元素和级联元素的含义
- 如何在PL/SQL Developer中设置使其可以显示查询返回的所有记录
- webx—业务逻辑之结果集封装
- 异常的学习
- OpenGL
- 复习笔记9 if else 以及效率优化