隨筆:15 文章:206 評論:35 引用:0
fenglin
創新、創意、挑戰
C++博客
首頁
發新隨筆
發新文章
聯系
聚合
管理
Spring3_模擬Spring框架工作原理
用戶模型類User.java
package
com.bebig.model;
public
class
User
{
private
String username;
private
String password;
public
String getPassword()
{
return
password;
}
public
String getUsername()
{
return
username;
}
public
void
setPassword(String password)
{
this
.password
=
password;
}
public
void
setUsername(String username)
{
this
.username
=
username;
}
}
數據訪問接口UserDAO.java
package
com.bebig.dao;
import
com.bebig.model.User;
//
Data Access Object數據訪問接口
public
interface
UserDAO
{
public
void
save(User u);
}
數據訪問接口的實現UserDAOImpl.java
package
com.bebig.dao.impl;
import
com.bebig.dao.UserDAO;
import
com.bebig.model.User;
//
數據訪問接口的實現
public
class
UserDAOImpl
implements
UserDAO
{
@Override
public
void
save(User u)
{
System.out.println(
"
a user saved!
"
);
}
}
邏輯業務層UserService.java
package
com.bebig.service;
import
com.bebig.dao.UserDAO;
import
com.bebig.model.User;
//
邏輯業務層
public
class
UserService
{
private
UserDAO userDAO;
public
void
add(User u)
{
userDAO.save(u);
}
public
void
setUserDAO(UserDAO userDAO)
{
this
.userDAO
=
userDAO;
}
public
UserDAO getUserDAO()
{
return
userDAO;
}
}
Spring Bean工廠接口BeanFactory.java
package
com.bebig.spring;
public
interface
BeanFactory
{
public
Object getBean(String name);
}
Bean工廠實現方法ClassPathXmlApplicationContext.java
package
com.bebig.spring;
import
java.lang.reflect.Method;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;
import
org.jdom.Document;
import
org.jdom.Element;
import
org.jdom.input.SAXBuilder;
//
用JDOM解析bean的配置文件
public
class
ClassPathXmlApplicationContext
implements
BeanFactory
{
private
Map
<
String,Object
>
beans
=
new
HashMap
<
String,Object
>
();
public
ClassPathXmlApplicationContext()
throws
Exception
{
SAXBuilder sb
=
new
SAXBuilder();
Document doc
=
sb.build(
this
.getClass().getClassLoader().getResourceAsStream(
"
beans.xml
"
)).getDocument();
Element root
=
doc.getRootElement();
List list
=
root.getChildren(
"
bean
"
);
for
(
int
i
=
0
;i
<
list.size();i
++
)
{
Element element
=
(Element) list.get(i);
String id
=
element.getAttributeValue(
"
id
"
);
String clazz
=
element.getAttributeValue(
"
class
"
);
System.out.println(id
+
"
:
"
+
clazz);
Object o
=
Class.forName(clazz).newInstance();
beans.put(id, o);
for
(Element propertyElement : (List
<
Element
>
) element.getChildren(
"
property
"
))
{
String name
=
propertyElement.getAttributeValue(
"
name
"
);
String bean
=
propertyElement.getAttributeValue(
"
bean
"
);
Object beanObject
=
beans.get(bean);
String methodName
=
"
set
"
+
name.substring(
0
,
1
).toUpperCase()
+
name.substring(
1
);
System.out.println(
"
method name =
"
+
methodName);
Method m
=
o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[
0
]);
m.invoke(o, beanObject);
}
}
}
@Override
public
Object getBean(String name)
{
return
beans.get(name);
}
}
bean配置文件beans.xml
<
beans
>
<
bean
id
="u"
class
="com.bebig.dao.impl.UserDAOImpl"
/>
<
bean
id
="userService"
class
="com.bebig.service.UserService"
>
<
property
name
="userDAO"
bean
="u"
/>
</
bean
>
</
beans
>
測試用例:UserServiceTest.java
package
com.bebig.service;
import
org.junit.Test;
import
com.bebig.model.User;
import
com.bebig.spring.BeanFactory;
import
com.bebig.spring.ClassPathXmlApplicationContext;
public
class
UserServiceTest
{
@Test
public
void
testAdd()
throws
Exception
{
BeanFactory factory
=
new
ClassPathXmlApplicationContext();
UserService service
=
(UserService) factory.getBean(
"
userService
"
);
User u
=
new
User();
service.add(u);
}
}
模擬了Spring的Bean工廠,通過反射獲取相應配置實體類,并執行其方法。
發表于 2010-10-16 23:05
風林
閱讀(458)
評論(0)
編輯
收藏
引用
所屬分類:
JAVA
、
Spring
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
[轉]java編程中'為了性能'一些盡量做到的地方
JAVAC命令行錯誤
Java基礎_Collection接口下的子類存儲特性
Android_常用控件使用
Android_Activity&Intent&Layout
Integer自動裝箱、拆箱問題
自定義比較器、排序
JDBC操作實例
常用數據庫的JDBC連接代碼
[轉]J2SE_內部類
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
CALENDER
<
2025年8月
>
日
一
二
三
四
五
六
27
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
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
給我留言
查看公開留言
查看私人留言
隨筆分類
jBPM
(rss)
隨筆檔案
2011年7月 (1)
2011年4月 (1)
2011年2月 (1)
2010年11月 (1)
2010年10月 (2)
2010年9月 (3)
2010年8月 (4)
2010年7月 (2)
文章分類
AJAX(2)
(rss)
Android(2)
(rss)
C#(20)
(rss)
C++(6)
(rss)
ckeditor&ckfinder(1)
(rss)
CSS
(rss)
Delphi(2)
(rss)
Hibernate(39)
(rss)
JAVA(95)
(rss)
jQuery(1)
(rss)
JSP(9)
(rss)
Maven(1)
(rss)
MySQL(4)
(rss)
OOP(1)
(rss)
Python(42)
(rss)
Spring(31)
(rss)
SQL Server(4)
(rss)
Struts2(35)
(rss)
SVN(1)
(rss)
Tomcat(1)
(rss)
Ubuntu(1)
(rss)
軟件加解密技術
(rss)
雜文(1)
(rss)
文章檔案
2011年8月 (1)
2011年7月 (3)
2011年6月 (19)
2011年5月 (2)
2011年4月 (1)
2011年2月 (1)
2010年12月 (2)
2010年11月 (21)
2010年10月 (67)
2010年9月 (48)
2010年8月 (37)
2010年7月 (4)
新聞檔案
2010年7月 (1)
相冊
CSS
Hibernate
搜索
最新評論
1.?re: Struts2_三種傳參數方法
方式的發生
--阿飛史蒂夫
2.?re: 在Win7上搭建JSP開發環境
評論內容較長,點擊標題查看
--鄒
3.?re: ckeditor&ckfinder&s2sh集成
評論內容較長,點擊標題查看
--庸幾何
4.?re: 在Win7上搭建JSP開發環境
下個 myeclipse@lou
--孫毅
5.?re: 在Win7上搭建JSP開發環境
@lou
運行 -cmd 找到startup.bat 在java 環境中運行
--孫毅
閱讀排行榜
1.?開始找Java開發類工作了(515)
2.?給一家公司的軟件做加密方案(450)
3.?一流、二流、三流(436)
4.?周一到周五都得出差,周末才能回(431)
5.?從WIN32開發轉型到WEB開發(388)
評論排行榜
1.?周一到周五都得出差,周末才能回(2)
2.?給力2011(2)
3.?最近工作有點忙(0)
4.?生活(0)
5.?在博客園開博了(0)
Powered By:
博客園
模板提供
:
滬江博客
亚洲国产精品久久66
|
久久久精品国产sm调教网站
|
国产精品一区二区久久精品无码
|
亚洲国产精品久久久久
|
国产欧美久久久精品影院
|
国产午夜免费高清久久影院
|
国产精品激情综合久久
|
色欲av伊人久久大香线蕉影院
|
思思久久精品在热线热
|
国产精品久久国产精品99盘
|
国产午夜精品理论片久久
|
精品久久久中文字幕人妻
|
人人狠狠综合久久亚洲婷婷
|
精品久久久中文字幕人妻
|
久久国产成人
|
99热成人精品免费久久
|
亚洲AV无码久久精品蜜桃
|
亚洲а∨天堂久久精品
|
亚洲国产精品久久久久网站
|
久久亚洲精品人成综合网
|
怡红院日本一道日本久久
|
久久久亚洲欧洲日产国码是AV
|
91精品国产91久久久久久蜜臀
|
无码人妻少妇久久中文字幕蜜桃
|
欧美性猛交xxxx免费看久久久
|
丰满少妇人妻久久久久久4
|
国产亚洲美女精品久久久久狼
|
久久久噜噜噜久久中文福利
|
7777精品伊人久久久大香线蕉
|
亚洲äv永久无码精品天堂久久
|
91精品国产色综久久
|
色综合久久88色综合天天
|
久久夜色tv网站
|
久久精品国产亚洲av麻豆色欲
|
亚洲中文字幕无码久久综合网
|
伊人丁香狠狠色综合久久
|
青青草国产精品久久
|
狠狠人妻久久久久久综合蜜桃
|
999久久久免费国产精品播放
|
一本一道久久精品综合
|
久久精品亚洲男人的天堂
|