package com.papa.config;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.papa.entity.Bean;
import com.papa.entity.Beans;
import com.papa.entity.Property;
public class XmlConfig {
public void initBeanConfig(String xmlPath) {
// 读取文件
File file = new File(xmlPath);
SAXReader reader = new SAXReader();
try {
Document document = reader.read(file);
// 标签[根标签]
Element rootElement = document.getRootElement();
if (rootElement != null) {
//初始化容器[1]
Beans beansMap = Beans.getInit();
Map<String,Bean> beanMap = new HashMap<String,Bean>();//定义bean
beansMap.setBeans(beanMap);
Element beans = rootElement.element("beans");
/** *****************beans***************** */
if (beans != null) {
List<Element> bean = beans.elements("bean");
for (int i = 0; i < bean.size(); i++) {
Bean bean_ = new Bean();//定义bean
Element eBean = bean.get(i);// 取得bean
// 去bean下的name属性
Attribute attribute = eBean.attribute("id");
// bean 名字
String id = attribute.getValue();
Attribute attributeClass = eBean.attribute("class");
// 类的路径
String classPath = attributeClass.getValue();
bean_.setId(id);
bean_.setClassName(classPath);
/*********** 读取property属性 **************/
List<Element> property = eBean.elements("property");
if(property!=null){
//属性map
Map<String,Property> propertyMap = new HashMap<String,Property>();
for(int j=0;j<property.size();j++){
Element eProperty = property.get(j);
Attribute attPropertyName = eProperty.attribute("name");//property名字属性
String sPropertyName = attPropertyName.getValue();//property名字
Property property_ = new Property();
property_.setName(sPropertyName);
propertyMap.put(sPropertyName, property_);
Element eRef = eProperty.element("ref");//取得注入的bean标签
// Bean beanRef = new Bean();//注入的bean
if(eRef!=null){
Attribute attbeanId = eRef.attribute("bean");
String beanId = attbeanId.getValue();
// beanRef.setId(beanId);
property_.setRef(beanId);
}
}
bean_.setProperty(propertyMap);//把属性map添加到bean
}
/** *************************************** */
beanMap.put(id, bean_);//把bean放到beans内
}
/******* 扫描ref的bean 并填入bean的属性 ********/
Set<String> set = beanMap.keySet();
for(String key:set){
Bean bean_tmp = beanMap.get(key);
Map<String,Property> property_tmp = bean_tmp.getProperty();
if(property_tmp!=null){
Set<String> propertySet = property_tmp.keySet();
for(String propertyKey:set){
Property property1 = property_tmp.get(propertyKey);
if(property1!=null&&!property1.getRef().equals("")){
property1.setBean(beanMap.get(property1.getRef()));
}
}
}
}
/*********************************************/
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
自己动手写的类似spring框架
共22个文件
java:8个
class:8个
jar:2个
5星 · 超过95%的资源 需积分: 26 27 下载量 119 浏览量
2013-03-08
13:08:45
上传
评论
收藏 487KB RAR 举报
温馨提示
上课时给学生讲spring课的例子,自己手工开发的类似spring的框架,只实现了ioc的功能,比较简单容易理解,分享给想学习spring底层原理的朋友
资源推荐
资源详情
资源评论
收起资源包目录
papa.rar (22个子文件)
papa
.project 380B
src
papa.xml 219B
com
papa
aop
config
XmlConfig.java 3KB
Test.java 569B
test
User.java 264B
Role.java 104B
entity
Bean.java 639B
Property.java 524B
Beans.java 612B
bean
BeanFactory.java 2KB
lib
dom4j-1.6.1.jar 307KB
jaxen-1.1.1.jar 222KB
.classpath 348B
bin
papa.xml 219B
com
papa
aop
config
Test.class 865B
XmlConfig.class 4KB
test
User.class 1KB
Role.class 372B
entity
Beans.class 1KB
Bean.class 1KB
Property.class 972B
bean
BeanFactory.class 3KB
共 22 条
- 1
资源评论
- 家奇2014-05-19这简直就是个垃圾,基本没用,我可以骂人吗?这什么东西 写的 太烂
- mirror_mask2014-03-02一直在找这个,找啦很久了
liqiang135
- 粉丝: 0
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功