我的漫漫程序之旅
專(zhuān)注于JavaWeb開(kāi)發(fā)
隨筆 - 39, 文章 - 310, 評(píng)論 - 411, 引用 - 0
數(shù)據(jù)加載中……
簡(jiǎn)單模擬spring的容器管理bean
package
com.spring;
import
java.io.IOException;
import
java.net.URL;
import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;
import
org.jdom.Document;
import
org.jdom.Element;
import
org.jdom.JDOMException;
import
org.jdom.input.SAXBuilder;
import
org.jdom.xpath.XPath;
import
com.vo.BeanDefinition;
/** */
/**
* 簡(jiǎn)單模擬spring的ClassPathXmlApplicationContext spring容器管理bean
*
*
@author
zdw
*
*/
@SuppressWarnings(
"
unchecked
"
)
public
class
MyApplicationContext
{
private
List
<
BeanDefinition
>
list
=
new
ArrayList
<
BeanDefinition
>
();
private
Map
<
String, Object
>
sigletons
=
new
HashMap
<
String, Object
>
();
public
MyApplicationContext(String fileName)
{
this
.readXML(fileName);
try
{
instanceBeans();
}
catch
(Exception e)
{
e.printStackTrace();
}
}
/** */
/**
* 實(shí)例化所有bean
*
*
@throws
InstantiationException
*
@throws
IllegalAccessException
*
@throws
ClassNotFoundException
*/
private
void
instanceBeans()
throws
InstantiationException,
IllegalAccessException, ClassNotFoundException
{
for
(BeanDefinition bean : list)
{
if
(
null
!=
bean.getClassName()
&&
bean.getClassName().length()
>
0
)
sigletons.put(bean.getId(), Class.forName(bean.getClassName())
.newInstance());
}
}
/** */
/**
* 讀取xml配置
*
*
@param
fileName
*/
public
void
readXML(String fileName)
{
SAXBuilder builder
=
new
SAXBuilder();
URL url
=
this
.getClass().getClassLoader().getResource(fileName);
try
{
Document doc
=
builder.build(url);
XPath xpath
=
XPath.newInstance(
"
//ns:beans/ns:bean
"
);
xpath.addNamespace(
"
ns
"
,
"
http://www.springframework.org/schema/beans
"
);
List
<
Element
>
beans
=
xpath.selectNodes(doc);
for
(Element bean : beans)
{
String id
=
bean.getAttributeValue(
"
id
"
);
String className
=
bean.getAttributeValue(
"
class
"
);
BeanDefinition beanDefinition
=
new
BeanDefinition(id,
className);
list.add(beanDefinition);
}
}
catch
(JDOMException e)
{
e.printStackTrace();
}
catch
(IOException e)
{
e.printStackTrace();
}
}
/** */
/**
* 得到指定id的bean
*
*
@param
id
*
@return
*/
public
Object getBean(String id)
{
return
sigletons.get(id);
}
}
測(cè)試:
@Test
public
void
testMyUserService()
{
MyApplicationContext ctx
=
new
MyApplicationContext(
"
beans.xml
"
);
UserService us
=
(UserService) ctx.getBean(
"
userService
"
);
us.print();
}
下載地址1
下載地址2
posted on 2009-01-22 11:00
々上善若水々
閱讀(1573)
評(píng)論(2)
編輯
收藏
評(píng)論
#
re: 簡(jiǎn)單模擬spring的容器管理bean
回復(fù)
更多評(píng)論
哈哈,簡(jiǎn)單的對(duì)象管理器,你的依賴呢! 沒(méi)啥用!
2009-01-26 10:05 |
Jack.Wang
#
re: 簡(jiǎn)單模擬spring的容器管理bean[未登錄](méi)
回復(fù)
更多評(píng)論
@Jack.Wang
簡(jiǎn)單便于我們理解spring的原理。
2009-01-29 09:07 |
angel
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
Powered by:
BlogJava
Copyright © 々上善若水々
導(dǎo)航
BlogJava
首頁(yè)
新隨筆
聯(lián)系
管理
<
2009年1月
>
日
一
二
三
四
五
六
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
常用鏈接
我的隨筆
我的評(píng)論
我的參與
最新評(píng)論
留言簿
(39)
給我留言
查看公開(kāi)留言
查看私人留言
隨筆檔案
(43)
2021年12月 (1)
2012年12月 (1)
2012年11月 (1)
2009年11月 (2)
2009年10月 (1)
2009年8月 (1)
2009年7月 (1)
2009年5月 (2)
2009年4月 (2)
2009年3月 (1)
2009年2月 (3)
2009年1月 (1)
2008年12月 (2)
2008年11月 (3)
2008年9月 (2)
2008年8月 (1)
2008年7月 (2)
2008年6月 (2)
2008年5月 (9)
2008年4月 (2)
2007年12月 (3)
文章分類(lèi)
(304)
AJAX(7)
(rss)
flex3(1)
(rss)
Hibernate(4)
(rss)
J2EE
(rss)
J2ME(2)
(rss)
J2SE(40)
(rss)
JavaScript(59)
(rss)
JavaWeb(27)
(rss)
Java筆試與面試(52)
(rss)
JQuery(1)
(rss)
Maven(2)
(rss)
opensource(15)
(rss)
Spring(10)
(rss)
SSH整合系列(2)
(rss)
Struts1.x(3)
(rss)
Struts2(13)
(rss)
WebService(14)
(rss)
數(shù)據(jù)庫(kù)(18)
(rss)
數(shù)據(jù)結(jié)構(gòu)與算法(7)
(rss)
設(shè)計(jì)模式(17)
(rss)
軟件測(cè)試(10)
(rss)
文章檔案
(257)
2021年12月 (1)
2012年12月 (2)
2012年9月 (2)
2012年7月 (5)
2012年1月 (1)
2011年10月 (1)
2010年12月 (1)
2009年9月 (2)
2009年7月 (2)
2009年6月 (1)
2009年4月 (3)
2009年3月 (3)
2009年1月 (2)
2008年12月 (4)
2008年11月 (4)
2008年10月 (2)
2008年9月 (2)
2008年8月 (10)
2008年7月 (22)
2008年6月 (13)
2008年5月 (45)
2008年4月 (17)
2008年3月 (5)
2008年2月 (11)
2008年1月 (27)
2007年12月 (45)
2007年11月 (24)
搜索
最新評(píng)論
1.?re: 使用MyEclipse構(gòu)建MAVEN項(xiàng)目
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--龍平
2.?re: JDK中的URLConnection參數(shù)詳解[未登錄](méi)
好文要頂
--wy
3.?re: Ant path 匹配原則[未登錄](méi)
我喜歡你惠茹
--aaa
4.?re: Ant path 匹配原則[未登錄](méi)
dfdfdfdfd
--aaa
5.?re: 利用jSMSEngine開(kāi)源包進(jìn)行短信的收發(fā)[未登錄](méi)
qq郵箱
550725115@qq.com
--我是菜鳥(niǎo)
閱讀排行榜
1.?Linux上安裝JDK1.7與Tomcat7.0(24261)
2.?將java應(yīng)用程序打包成獨(dú)立運(yùn)行的.exe方法(19827)
3.?HttpURLConnection請(qǐng)求數(shù)據(jù)流的寫(xiě)入(write)和讀取(read)(19094)
4.?基于jsTree的無(wú)限級(jí)樹(shù)JSON數(shù)據(jù)的轉(zhuǎn)換(17623)
5.?javascript文件夾選擇框的兩種解決方案(16929)
評(píng)論排行榜
1.?基于jsTree的無(wú)限級(jí)樹(shù)JSON數(shù)據(jù)的轉(zhuǎn)換(27)
2.?Flash圖表(FusionChartsV3)的簡(jiǎn)單應(yīng)用 (22)
3.?WEB頁(yè)面導(dǎo)出為Word文檔后分頁(yè)&橫向打印的方法 (14)
4.?javascript文件夾選擇框的兩種解決方案(10)
5.?[原創(chuàng)]J2ME/J2EE實(shí)現(xiàn)用戶登錄交互(9)
主站蜘蛛池模板:
www一区二区www免费
|
99ri精品国产亚洲
|
国产成人青青热久免费精品
|
18禁网站免费无遮挡无码中文
|
特级精品毛片免费观看
|
大地资源网高清在线观看免费
|
一个人看的www视频免费在线观看 一个人看的免费观看日本视频www
|
人人狠狠综合久久亚洲88
|
久久影院亚洲一区
|
亚洲精品综合久久
|
丝袜熟女国偷自产中文字幕亚洲
|
亚洲精品亚洲人成在线观看下载
|
亚洲日韩在线中文字幕第一页
|
亚洲精品A在线观看
|
国产午夜亚洲不卡
|
亚洲热线99精品视频
|
亚洲精品你懂的在线观看
|
日韩国产免费一区二区三区
|
999在线视频精品免费播放观看
|
在线视频精品免费
|
免费毛片在线看片免费丝瓜视频
|
好吊妞998视频免费观看在线
|
免费看美女被靠到爽的视频
|
日韩亚洲精品福利
|
亚洲色婷婷一区二区三区
|
国产成人精品日本亚洲
|
亚洲综合免费视频
|
亚洲成a人片在线不卡
|
亚洲精品动漫免费二区
|
狠狠热精品免费观看
|
好男人资源在线WWW免费
|
久久精品免费视频观看
|
手机看黄av免费网址
|
在线观看亚洲免费
|
中文字幕亚洲一区二区三区
|
亚洲国产精品lv
|
亚洲色无码国产精品网站可下载
|
最好2018中文免费视频
|
可以免费观看的毛片
|
毛片大全免费观看
|
亚洲乱码国产一区网址
|