wangflood
精心维护一个技术blog,为了工作,也是爱好。
BlogJava
::
首页
::
联系
::
聚合
::
管理
14 Posts :: 19 Stories :: 8 Comments :: 0 Trackbacks
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(2)
给我留言
查看公开留言
查看私人留言
我参与的团队
随笔档案
2011年4月 (11)
2011年3月 (1)
2011年1月 (1)
2010年12月 (2)
文章分类
android
C/C++
DB
J2EE/SSH(3)
java(11)
linux
python
ruby
创业(2)
嵌入
数算模业
求职
随笔(2)
文章档案
2011年3月 (9)
2010年12月 (5)
2010年11月 (4)
收藏夹
业余(4)
技术(1)
搜索
最新评论
1. re: 关于saveOrUpdate(Object obj)方法
同求!!
我也是一直就先取出来,然后set回去的,有好方法记得分享哈~~
--竹木一
2. re: List的toArray方法
评论内容较长,点击标题查看
--Spartan
3. re: List的toArray方法
评论内容较长,点击标题查看
--xp
4. re: List的toArray方法
评论内容较长,点击标题查看
--xp
5. re: jquery复习(四)
写的太多了,你就不会精炼一点吗?
--wshsdlau
阅读排行榜
1. 《菊与刀》读后感(2317)
2. jquey复习(三)(1990)
3. jquery复习(四)(1793)
4. jquey复习(一)(376)
5. 《食物是最好的医药》读后感(374)
评论排行榜
1. jquery复习(四)(2)
2. jquey复习(三)(1)
3. 56789+-*/() 2000(1)
4. 初涉C#,怀念java(0)
5. 回首2010,展望2011(0)
spring IOC模拟实现
spring IOC达到松耦合的目的,便于测试。我很喜欢"spirng容器"的说法,spring根据读取bean.xml,再用java反射机制,组合一些类,完成程序。其实,实现起来也不太难。不信你看。
模仿spring,BeanFactory
package
com.wang.spring;
public
interface
BeanFactory
{
public
Object getBean(String name);
}
主要类:ClassPathXmlApplicationContext,当然spring的这个类里有国际化等功能实现,这里就简了。
package
com.wang.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;
import
wang.spring.dao.UserDao;
import
wang.spring.dao.impl.UserDaoImpl;
public
class
ClassPathXmlApplicationContext
implements
BeanFactory
{
private
Map
<
String, Object
>
beans
=
new
HashMap
<
String, Object
>
();
//
IOC Inverse of Control DI Dependency Injection
public
ClassPathXmlApplicationContext()
throws
Exception
{
SAXBuilder sb
=
new
SAXBuilder();
Document doc
=
sb.build(
this
.getClass().getClassLoader()
.getResourceAsStream(
"
beans.xml
"
));
//
构造文档对象
Element root
=
doc.getRootElement();
//
获取根元素HD
List list
=
root.getChildren(
"
bean
"
);
//
取名字为disk的所有元素
for
(
int
i
=
0
; i
<
list.size(); i
++
)
{
Element element
=
(Element) list.get(i);
String id
=
element.getAttributeValue(
"
id
"
);
String clazz
=
element.getAttributeValue(
"
class
"
);
Object o
=
Class.forName(clazz).newInstance();
System.out.println(id);
System.out.println(clazz);
beans.put(id, o);
//
i=1 new UserDaoImpl();
for
(Element propertyElement : (List
<
Element
>
) element
.getChildren(
"
property
"
))
{
String name
=
propertyElement.getAttributeValue(
"
name
"
);
//
得到userDAO
String bean
=
propertyElement.getAttributeValue(
"
bean
"
);
//
u
//
相当于 UserDao u = new UserDaoImpl();
Object beanObject
=
beans.get(bean);
//
UserDAOImpl instance
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);
}
}
}
public
Object getBean(String id)
{
return
beans.get(id);
}
}
posted on 2010-11-14 09:46
wangflood
阅读(277)
评论(0)
编辑
收藏
所属分类:
J2EE/SSH
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
关于saveOrUpdate(Object obj)方法
spring IOC模拟实现
jdom试验
Copyright @ wangflood
Powered by:
.Text
and
ASP.NET
Theme by:
.NET Monster