| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5197 人关注过本帖
标题:自己写个简单的IOC容器
只看楼主 加入收藏
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
结帖率:0
收藏
 问题点数:0 回复次数:11 
自己写个简单的IOC容器
第一次看spring的时候,会感觉IOC好神奇阿。不需要设置值,用的时候取就可以了。那么它是怎么实现的呢?核心就是IOC容器。那么它有多神秘呢额?其实很简单,就是读取配置文件,生成对应的Bean,再将值赋给那个Bean就行了,取的时候直接用那个getBean方法去取就行了。
废话少说,我们自己来写一个简单的IOC容器,来证明其实它就是那么回事。
名字我们完全按照Spring的来,让测试起来就感觉在用Spring一样。
我们的测试例子是这样的,两个类,User和People,User里又name和age,People里又User的引用。调用People里的User里的say方法,打印。先看这两个类。
User类
图片附件: 游客没有浏览图片的权限,请 登录注册


People类
图片附件: 游客没有浏览图片的权限,请 登录注册


没有需要废话的地方吧 ?
接着我们写个配置文件,放到src目录下。
applicationContext.xml
图片附件: 游客没有浏览图片的权限,请 登录注册


和Spring的配置文件又区别吗?

然后呢,我们来写IOC,首先声明个接口!
ApplicationContext
图片附件: 游客没有浏览图片的权限,请 登录注册


接着是实现。ClassPathXMLApplicationContext类。

首先是构造方法
图片附件: 游客没有浏览图片的权限,请 登录注册


就是根据文件名,从类路径下去读取那个xml文件,然后调用readXML()去读取xml文件,生成相应的Bean并赋值放到一个map里。

readXML()方法
图片附件: 游客没有浏览图片的权限,请 登录注册

这个方法就是IOC核心了,这里我用的是jdom来处理xml文件的,dom4j也行,无所谓。
1.是使用的XPath来读取的xml,如果不熟可以看看资料。
2.取得定义的类,实例化并取得所有定义的方法。
3.取出所有以set开头的方法。
4.如果xml定义里面的property有name属性就赋值
5.如果没有name属性就用ref属性来链接其他 bean(可以看出,带ref一定要在要链接的bean后面,如果没有是查不到的。)

最后写个类测试一下。
图片附件: 游客没有浏览图片的权限,请 登录注册

和Spring没区别吧?看看结果吧

OK。IOC其实就是这么简单,这个只是简单的实现,要深入研究,就去看Spring的源代码吧。

MyCodes.tar.gz (2.36 MB) 源码

搜索更多相关主题的帖子: IOC 
2008-10-15 10:26
guoxhvip
Rank: 8Rank: 8
来 自:聖西羅南看臺
等 级:贵宾
威 望:44
帖 子:4052
专家分:135
注 册:2006-10-8
收藏
得分:0 
很好很好

愛生活 && 愛編程
2008-10-15 15:43
天使坠落的眼泪
Rank: 2
等 级:新手上路
威 望:5
帖 子:204
专家分:0
注 册:2006-5-16
收藏
得分:0 
IOC只是spring的一个部分,spring的强大还在于AspectJ,别只知道了一点就觉得很多了

樹欲靜而風不止... http://blog./seablue_xj
2008-10-15 17:19
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 
回复 3# 天使坠落的眼泪 的帖子
哥们说话好有火药味阿,我并没有说我知道了很多。
我只是把自己的学习代码共享一下而已。。。。
我也没说ioc就是spring的全部,而且AspectJ并不是Spring的东西,只是Spring支持而已,Spring默认的AOP实现还是动态代理 而IOC和AOP不过是Spring其他部分的构成基础而已。
如果我有说错还请前辈不吝赐教
2008-10-15 17:52
Ethip
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:771
专家分:0
注 册:2008-1-18
收藏
得分:0 
支持个
2008-10-16 09:04
lawywxf
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-10-10
收藏
得分:0 
支持
2008-10-27 14:37
leweslove
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2008-4-3
收藏
得分:0 
spring在一般使用中最重要的应用也就是Ioc

够毒才够美,嘿咻致死....
2008-11-05 15:58
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 
我感觉AOP更有吸引力。虽然spring不完全支持AOP,日常开发应该够了。而且也集成了CGLIB。
2008-11-05 16:47
恋轩念伊人
Rank: 5Rank: 5
来 自:湖南衡阳
等 级:贵宾
威 望:19
帖 子:643
专家分:0
注 册:2008-2-23
收藏
得分:0 
回复 8# 的帖子
但是这个AOP你能完全写的出来吗?
我在我周围还没有见谁写过?

我不是一个随便的人,我随便起来不是人我哦。信不?
2008-11-12 19:37
huwangvs
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:764
专家分:0
注 册:2007-2-4
收藏
得分:0 
Spring的AOP实现就是动态代理。如果是CGLIB那种,我就迷茫了。。。。
我自己写了一个类似SpringAOP的检验类,对Spring里面的那个execution(* *(...)),还没完全实现,最近学习新东西,有段时间没写了,抽空搞完了,放项目里面试试
2008-11-12 20:44
快速回复:自己写个简单的IOC容器
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026463 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved