小黑J2EE學習ing
我很會努力
BlogJava
首頁
新隨筆
聯系
聚合
管理
隨筆-21 評論-29 文章-0 trackbacks-0
小黑Spring學習(三) 編碼剖析Spring管理Bean的原理
通過第一個實例我們會有一個疑問,Spring到底是怎么管理Bean的呢?
我們來模擬Spring的內部實現
在junit.test下新建
ItcastClassPathXMLApplicationContext
類
類的完全代碼(這里要引入dom4j的jar包)
package
junit.test;
import
java.net.URL;
import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.HashSet;
import
java.util.List;
import
java.util.Map;
import
org.dom4j.Document;
import
org.dom4j.Element;
import
org.dom4j.XPath;
import
org.dom4j.io.SAXReader;
/** */
/**
* 傳智傳客版容器
*
*/
public
class
ItcastClassPathXMLApplicationContext
{
private
List
<
BeanDefinition
>
beanDefines
=
new
ArrayList
<
BeanDefinition
>
();
private
Map
<
String, Object
>
sigletons
=
new
HashMap
<
String, Object
>
();
public
ItcastClassPathXMLApplicationContext(String filename)
{
this
.readXML(filename);
this
.instanceBeans();
}
/** */
/**
* 完成bean的實例化
*/
private
void
instanceBeans()
{
for
(BeanDefinition beanDefinition : beanDefines)
{
try
{
if
(beanDefinition.getClassName()
!=
null
&&
!
""
.equals(beanDefinition.getClassName().trim()))
sigletons.put(beanDefinition.getId(), Class.forName(beanDefinition.getClassName()).newInstance());
}
catch
(Exception e)
{
e.printStackTrace();
}
}
}
/** */
/**
* 讀取xml配置文件
*
@param
filename
*/
private
void
readXML(String filename)
{
SAXReader saxReader
=
new
SAXReader();
Document document
=
null
;
try
{
URL xmlpath
=
this
.getClass().getClassLoader().getResource(filename);
document
=
saxReader.read(xmlpath);
Map
<
String,String
>
nsMap
=
new
HashMap
<
String,String
>
();
nsMap.put(
"
ns
"
,
"
http://www.springframework.org/schema/beans
"
);
//
加入命名空間
XPath xsub
=
document.createXPath(
"
//ns:beans/ns:bean
"
);
//
創建beans/bean查詢路徑
xsub.setNamespaceURIs(nsMap);
//
設置命名空間
List
<
Element
>
beans
=
xsub.selectNodes(document);
//
獲取文檔下所有bean節點
for
(Element element: beans)
{
String id
=
element.attributeValue(
"
id
"
);
//
獲取id屬性值
String clazz
=
element.attributeValue(
"
class
"
);
//
獲取class屬性值
BeanDefinition beanDefine
=
new
BeanDefinition(id, clazz);
beanDefines.add(beanDefine);
}
}
catch
(Exception e)
{
e.printStackTrace();
}
}
/** */
/**
* 獲取bean實例
*
@param
beanName
*
@return
*/
public
Object getBean(String beanName)
{
return
this
.sigletons.get(beanName);
}
}
新建
BeanDefinition
,用來存放bean里面的兩個屬性 id 和 className。
package
junit.test;
public
class
BeanDefinition
{
private
String id;
private
String className;
public
BeanDefinition(String id, String className)
{
this
.id
=
id;
this
.className
=
className;
}
public
String getId()
{
return
id;
}
public
void
setId(String id)
{
this
.id
=
id;
}
public
String getClassName()
{
return
className;
}
public
void
setClassName(String className)
{
this
.className
=
className;
}
}
修改SpringTest代碼 測試程序
package
junit.test;
import
org.junit.BeforeClass;
import
org.junit.Test;
import
cn.itcast.service.PersonService;
public
class
SpringTest
{
@BeforeClass
public
static
void
setUpBeforeClass()
throws
Exception
{
}
@Test
public
void
instanceSpring()
{
ItcastClassPathXMLApplicationContext ctx
=
new
ItcastClassPathXMLApplicationContext(
"
beans.xml
"
);
PersonService personService
=
(PersonService)ctx.getBean(
"
personService
"
);
personService.save();
}
}
執行測試 控制臺輸出為
說明我們新建的傳智播客容器取到了bean實例 并成功地調用了save方法
通過實例,我們就可以理解Spring是創建和管理bean的!
小黑spring學習源代碼
參考源代碼
posted on 2009-05-06 14:03
特立獨行
閱讀(445)
評論(0)
編輯
收藏
所屬分類:
Spring框架
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
Spring 框架的設計理念與設計模式分析(2)
小黑Spring學習(四)
小黑Spring學習(三) 編碼剖析Spring管理Bean的原理
小黑Spring學習(二)
小黑Spring學習(一)
小黑J2EE學習之路 歡迎大家觀臨! 希望大家能多指教哦!
<
2025年5月
>
日
一
二
三
四
五
六
27
28
29
30
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
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(2)
給我留言
查看公開留言
查看私人留言
隨筆分類
Hibernate框架(6)
J2EE核心技術(1)
Java 技術
Java面試題
Spring框架(5)
Struts框架(7)
數據庫
隨筆檔案
2010年6月 (2)
2009年6月 (1)
2009年5月 (17)
2009年4月 (1)
搜索
最新評論
1.?re: struts2實現文件上傳和下載[未登錄]
下載做來直接就在頁面把文件打開了。。
--小菜
2.?re: struts2實現文件上傳和下載
你這代碼量有點多,STRUTS2封裝好了,頂多15行搞定
--你這代碼量有點多
3.?re: struts2實現文件上傳和下載
怎么將上傳的東西在頁面上顯示出來啊
--邊城
4.?re: struts2實現文件上傳和下載
配置的文件 有關鍵字, 把action 中的name 換下就可以了 @陳
--采用
5.?re: struts2實現文件上傳和下載
大俠 ……怎么實現點一個文件下載一個文件,而不是固定的文件?
--pppppppppp
閱讀排行榜
1.?struts2實現文件上傳和下載(17518)
2.?小黑struts學習(五) Action Mapping、ActionForward和ActionForm組件學習(1626)
3.?小黑Hibernate學習(三) Session接口及get、load、persist方法(1005)
4.?ASSH框架的技術基礎和設計(761)
5.?Spring 框架的設計理念與設計模式分析(654)
評論排行榜
1.?struts2實現文件上傳和下載(27)
2.?Spring 框架的設計理念與設計模式分析(1)
3.?很開心加入BlogJava 就像找到了組織一樣(1)
4.?Spring 框架的設計理念與設計模式分析(2)(0)
5.?JFreeChart的中文亂碼問題 知道的幫忙解決一下(0)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 特立獨行
主站蜘蛛池模板:
毛片a级毛片免费播放100
|
99在线免费观看视频
|
蜜桃精品免费久久久久影院
|
亚洲嫩草影院在线观看
|
国产免费丝袜调教视频
|
亚洲一区电影在线观看
|
嫩草视频在线免费观看
|
亚洲AV无码男人的天堂
|
亚洲另类春色国产精品
|
99re热免费精品视频观看
|
麻豆国产精品入口免费观看
|
国产精品亚洲综合久久
|
国产资源免费观看
|
亚洲男女一区二区三区
|
无码一区二区三区AV免费
|
亚洲精品无码不卡在线播放
|
又大又硬又爽免费视频
|
国产一级a毛一级a看免费视频
|
亚洲国产精品一区第二页
|
四虎最新永久免费视频
|
亚洲av色影在线
|
国产99精品一区二区三区免费
|
国产亚洲自拍一区
|
四虎成人精品永久免费AV
|
亚洲人成综合在线播放
|
免费a级毛片大学生免费观看
|
国产vA免费精品高清在线观看
|
亚洲国产精品久久久久婷婷老年
|
57PAO成人国产永久免费视频
|
疯狂做受xxxx高潮视频免费
|
成年在线观看网站免费
|
免费精品视频在线
|
国产免费av一区二区三区
|
h片在线观看免费
|
在线免费观看亚洲
|
四只虎免费永久观看
|
久久久久国产精品免费免费不卡
|
香蕉视频在线观看免费
|
亚洲av日韩av天堂影片精品
|
四虎在线免费播放
|
无码精品国产一区二区三区免费
|