小黑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 特立獨行
主站蜘蛛池模板:
久久精品无码精品免费专区
|
国产亚洲高清在线精品不卡
|
男的把j放进女人下面视频免费
|
亚洲精品天堂成人片?V在线播放
|
精品亚洲视频在线
|
全免费A级毛片免费看网站
|
亚洲综合中文字幕无线码
|
永久免费毛片在线播放
|
亚洲无码一区二区三区
|
最新69国产成人精品免费视频动漫
|
四色在线精品免费观看
|
亚洲性无码一区二区三区
|
白白国产永久免费视频
|
女人裸身j部免费视频无遮挡
|
亚洲一区二区三区在线播放
|
青草久久精品亚洲综合专区
|
无码欧精品亚洲日韩一区夜夜嗨
|
免费福利在线观看
|
77777亚洲午夜久久多人
|
久久福利青草精品资源站免费
|
亚洲AV综合色区无码一区
|
91视频免费网址
|
亚洲男人天堂2022
|
亚洲国产精品激情在线观看
|
羞羞视频免费网站在线看
|
色拍自拍亚洲综合图区
|
日韩精品成人无码专区免费
|
久久无码av亚洲精品色午夜
|
午夜免费福利影院
|
另类小说亚洲色图
|
亚洲国产精品va在线播放
|
91青青青国产在观免费影视
|
亚洲熟伦熟女专区hd高清
|
亚洲性日韩精品国产一区二区
|
人妻在线日韩免费视频
|
亚洲狠狠ady亚洲精品大秀
|
暖暖免费高清日本中文
|
久久毛片免费看一区二区三区
|
久久夜色精品国产噜噜噜亚洲AV
|
在线观看视频免费国语
|
无遮挡a级毛片免费看
|