将ApplicationContext.xml加载到java内存中

将ApplicationContext.xml加载到java内存中
<?xml version="1.0" encoding="UTF-8"?>
<beans>
	<bean id="userDao" className="cn.itcast.dao.impl.UserDaoImpl">
		<property name="xmlName" value="users.xml"/>
	</bean>
	<bean id="bookDao" className="cn.itcast.dao.impl.BookDaoImpl">
		<property name="xmlName" value="books.xml"/>
	</bean>
	<bean id="userService" className="cn.itcast.dao.impl.UserServiceImpl">
		<property name="userDao" ref="userDao"/>
		<property name="bookDao" ref="bookDao"/>
	</bean>
</beans>

2,将对应的标签封装成java对象


在BeanConfig中存在一个Map<Stirng,PropertyConfig> 对应<bean>中的多个<property>子元素,其中<property>的name就是Map的键,<property>本身作值;


3,实现加载方法:

package cn.lwuyang.exercise;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.Element;

import cn.lwuyang.xml.utils.XmlUtils;

public class BeanLoadUtils {
	public static Map<String,BeanConfig> load(String xmlName){
		/**
		 * 0,创建Map集合容器
		 * 1,获取Document,在获取xml资源的根元素(root),再获取所有子元素,即bean元素
		 * 2,遍历所有的<bean>元素,再把<bean>元素映射成一个BeanConfig对象
		 * <bean id="userDao" className="cn.itcast.dao.impl.UserDaoImpl">
		 *    <property name="xmlName" value="users.xml"/>
	     * </bean>--->>这是一个BeanConfig对象
	     * 3,再将BeanConfig对象装载到Map集合中
		 */
		Map<String,BeanConfig> map = new LinkedHashMap<String,BeanConfig>();
		//获取Document对象
		Document doc = XmlUtils.getDocument(xmlName);
		//得到root元素
		Element root = doc.getRootElement();
		//得到所有的<bean>
		List<Element> eles =  root.elements();
		for (Element ele : eles) {
			//将Element对象转换为BeanConfig对象
			BeanConfig beanConfig = toBeanConfig(ele);
			map.put(beanConfig.getId(),beanConfig);
		}
		return map;
	}

	/**
	 * 将<bean>转换为BeanConfig对象
	 * @param ele 
	 * @return BeanConfig对象
	 */
	public static BeanConfig toBeanConfig(Element beanEle) {
		/*
		 * 1创建BeanConfig对象
		 * 2获取beanEle的id属性值,调用beanConfig对象的setId()设置它
		 * 3获取beanEle的className属性值,调用beanConfig对象的setClassName()设置它
		 */
		BeanConfig beanConfig = new BeanConfig();
		String id = beanEle.attributeValue("id");
		String className= beanEle.attributeValue("className");
		beanConfig.setId(id);
		beanConfig.setClassName(className);
		
		/**
		 * 映射<property>子元素
		 * 1,获取beanEle的所有<property>子元素
		 * 2,遍历<property>子元素
		 * 3,把每一个<property>子元素映射为PropertyConfig对象
		 * 4,调用BeanConfig对象的addPropertyConfig()方法完成添加操作
		 */
		List<Element> proElements = beanEle.elements();
		for (Element propEle : proElements) {
			//将<property>转换为PropertyConfig对象
			PropertyConfig propertyConfig = toPropertyConfig(propEle);
			beanConfig.addPropertyConfig(propertyConfig);
		}
		
		return beanConfig;
	}

	/**
	 * 将<propeerty>转换为PropertyConfig
	 * @param propEle
	 * @return
	 */
	public static PropertyConfig toPropertyConfig(Element propEle) {
		PropertyConfig propertyConfig = new PropertyConfig();
		String name = propEle.attributeValue("name");
		String value = propEle.attributeValue("value");
		String ref = propEle.attributeValue("ref");
		propertyConfig.setName(name);
		propertyConfig.setValue(value);
		propertyConfig.setRef(ref);
		
		return propertyConfig;
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇