小黑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 特立獨行
主站蜘蛛池模板:
亚洲成人高清在线观看
|
亚洲免费日韩无码系列
|
青春禁区视频在线观看直播免费
|
国产亚洲欧洲精品
|
免费无码av片在线观看
|
激情综合色五月丁香六月亚洲
|
一区二区三区AV高清免费波多
|
亚洲JIZZJIZZ中国少妇中文
|
国产亚洲美女精品久久久久
|
免费jjzz在在线播放国产
|
爱情岛论坛亚洲品质自拍视频网站
|
成人亚洲国产精品久久
|
天天摸天天操免费播放小视频
|
亚洲男人天堂2022
|
国产裸模视频免费区无码
|
美女裸免费观看网站
|
亚洲国产精品人人做人人爱
|
中文字幕在线成人免费看
|
亚洲制服中文字幕第一区
|
亚洲视频在线免费看
|
wwwxxx亚洲
|
免费一级毛片正在播放
|
精品国产呦系列在线观看免费
|
久久亚洲国产精品五月天
|
一级女人18毛片免费
|
亚洲AV成人无码久久WWW
|
亚洲精品视频免费
|
久久国产精品免费看
|
国产成+人+综合+亚洲专
|
免费在线观看的黄色网址
|
日本高清不卡aⅴ免费网站
|
亚洲黄色免费网站
|
色www永久免费视频
|
中文在线免费不卡视频
|
91午夜精品亚洲一区二区三区
|
国产精品深夜福利免费观看
|
免费在线看黄网站
|
亚洲乱色熟女一区二区三区蜜臀
|
国产亚洲自拍一区
|
av大片在线无码免费
|
一级毛片视频免费观看
|