小黑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 特立獨行
主站蜘蛛池模板:
最新久久免费视频
|
亚洲国产精品成人综合色在线
|
亚洲人成网站18禁止一区
|
国产无遮挡吃胸膜奶免费看
|
日韩成人免费在线
|
国产一区二区三区免费在线观看
|
国产精品免费看久久久无码
|
国产成人在线观看免费网站
|
免费在线观看中文字幕
|
亚洲国产精品成人网址天堂
|
亚洲美女高清一区二区三区
|
久久久久亚洲AV成人网人人软件
|
亚洲午夜无码AV毛片久久
|
伊人久久亚洲综合
|
亚洲成A人片在线观看WWW
|
久久亚洲AV成人无码软件
|
亚洲成人动漫在线观看
|
亚洲欧美一区二区三区日产
|
亚洲欧美国产欧美色欲
|
瑟瑟网站免费网站入口
|
国产精品1024在线永久免费
|
情人伊人久久综合亚洲
|
亚洲成年人在线观看
|
亚洲成a人片毛片在线
|
最新亚洲卡一卡二卡三新区
|
国产天堂亚洲国产碰碰
|
黄色视频在线免费观看
|
91制片厂制作传媒免费版樱花
|
美女18毛片免费视频
|
本道天堂成在人线av无码免费
|
中文在线观看永久免费
|
99视频在线精品免费
|
成熟女人特级毛片www免费
|
又爽又黄无遮挡高清免费视频
|
自拍偷自拍亚洲精品被多人伦好爽
|
亚洲AV中文无码乱人伦下载
|
亚洲国产成人在线视频
|
亚洲国产精品无码一线岛国
|
亚洲精品高清国产麻豆专区
|
青草久久精品亚洲综合专区
|
搡女人免费免费视频观看
|