玩玩Spring之IOC
2008-01-05 10:10:26 来源:WEB开发网核心提示: SPRing的功能是很强大的,在其“绝不发明自己认为好的轮子,玩玩Spring之IOC,而只发明自己认为不好的轮子”的指导思想下,通过充分实践了“一切实事求是、‘循证架构’的工作方式”的理论,我们就会设计一个动物类,把所有动物的共性抽象到一个基类中,基本上把轻量级的J2EE应用框架(
SPRing的功能是很强大的,在其“绝不发明自己认为好的轮子,而只发明自己认为不好的轮子”的指导思想下,通过充分实践了“一切实事求是、‘循证架构’的工作方式”的理论,基本上把轻量级的J2EE应用框架(如ORM、MVC等)进行了整合,并构架了一些常用的功能(如DAO),形成了一个功能强大的J2EE轻量级企业应用框架。
然而,或许是大家对Spring把握得还不透彻的缘故吧,看到很多软件企业中用到的Spring功能,基本上大多数都只是用其IOC功能,有时候附带用了其中的AOP事务治理功能。
IOC及AOP虽然不是Spring首创,然而其在这两块都是做得很不错的,应该说整个Spring框架就是围绕着其IOC实现及AOP实现架设起来的。我想,深入挖掘IOC、AOP以及Spring中的实现,使用等,对于初学者帮助会非常大,因此,从本期开始,大峡的《玩玩Spring系列》将伴随大家一起走进IOC及AOP的世界。
由于本人水平有限,文中难免有很多不足甚至错误之处,还请各位朋友不吝批评指教。 一、IOC简介
IOC-全称Inversion of Control,中文解释:控制反转。另外,IOC又称DI(全称)Dependency Injection,中文解释:依靠注入。
呵呵,这些名词搞得有点像学古文的味道哈。很多大师还都说IOC中有一个闻名的好莱坞理论:你呆着别动,到时我会找你。由于本人未到过好莱坞参加过社会实践,因此,这句话理解有点困难。
IOC是一种新的设计模式,即IOC模式,系统中通过引入实现了IOC模式的IOC容器,即可由IOC容器来治理对象的生命周期、依靠关系等,从而使得应用程序的配置和依靠性规范与实际的应用程序代码分开。其中一个特点就是通过文本的配件文件进行应用程序组件间相互关系的配置,而不用重新修改并编译具体的java代码。
当前比较知名的IOC容器有:Pico Container、Avalon 、Spring、JBoss、HiveMind、EJB等,国内由板桥里人负责的国产开源项目Jdon框架,也是具有IOC容器功能(由于没来得及认真研读其源码,似乎jdon中IOC部份是调用Pico的IOC容器功能来实现的)。
在上面的几个IOC容器中,轻量级的有Pico Container、Avalon、Spring、HiveMind等,超重量级的有EJB,而半轻半重的有容器有JBoss,Jdon等。
IOC究竟是什么?IOC是如何产生的?用在什么场合?为什么我们以前不用IOC,而现在要用IOC?“物有本末,事有终始”,为了更加透彻的理解这一问题,大峡打算从自己所理解的面向对象(OO)设计及编程发展历程来进行分析,也许这样能让IOC的初学者更加了解IOC的发展的前因后果,争取做到“知其然,知其所以然,使其然!”。
若大家等不急了,就直接百度一下有关IOC的其它文章,这方面国内很多先驱们已经作了很多介绍。如冰云的《IOC详解》、板桥里人的设计模式及IOC理论等。 二、 最老的OO编程 记得曾经看《Think in Java》最早版本的时候,里面有这么一句让人振奋话:一切都是对象。这时我们OO编程的核心是围绕着面向对象编程的三个特性即“继续”、“封装”、“多态”来展开的。
2.1 封装
那时我们学会了对现实就的事物及软件模型进行了抽象。比如要描述一只猫,那么这支猫应该有“颜色”、“重量”、“公母”、“脾气”、“出生日期”等属性,另外还有“跑”、“吃”、“叫”、“猫捉老鼠”等方法。如Java代码来表示,大致就是如下:
public Class Cat
{
private String color;//颜色
private String weight;//重量
private String sex;//公母
private String temper;//脾气
private String birthday;//出生日期
private void run ();//跑
private void eat (Food food); //吃(食物)
private void shout(int type);//叫(类别)
private boolean chase(Mice mice);//猫捉老鼠
} 2.2 继续
最早的OO编程时期,我们还会引入继续,还经常鼓励大家多用继续,认为继续就是OO编程思想的核心。继续的核心就是围绕着如何把类与类之间具有共同特性的部份抽象到基类中。认为这样不但能使用了OO的特性,还减少了很多子类的代码。
我们通过日常生活的常识知道,猫是一种动物,因此动物有的特性他基本上都有。于是,假如我们的系统中不但有猫,还会有很多其它的动物出现。我们就会设计一个动物类,把所有动物的共性抽象到一个基类中。这里,猫及动物基类的代码大致如下: public abstract Class Animal{
private String color;//颜色
private String weight;//重量
private String sex;//公母
private String temper;//脾气
private String birthday;//出生日期
private void run ();//跑
private void eat (Food food); //吃(食物)
private void shout(int type);//叫(类别)
} public Class Cat extends Animal
private int power;//能力
private int agility;//灵敏度
// 猫捉老鼠是特有的方法
private boolean chase(Mice mice) {
return true;
};
}
更多精彩
赞助商链接