(ICO)XML
Posted zss0520
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(ICO)XML相关的知识,希望对你有一定的参考价值。
XML 可扩展标记语言
在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。
语法:
头部标记 : <?xml version="1.0" encoding="UTF-8"?> 单标签 : <标签名称 属性1="值1" 属性2="值2" .... 属性N="值N" /> 双标签 : <标签名称 属性1="值1" 属性2="值2" .... 属性N="值N">标签之间的内容</标签名称>
特点 :
因为是程序的元语言文件,XML是不需要任何编译器就能直接被计算机识别,其实我们在之前就已经体会过了,我们现在写的html就是XML的一种高级应用,我们写HTML的时候只需要一个记事本就可以,写完了无需编译直接扔到浏览器里运行即可,所以我们可以利用XML的特性把要创建对象的类以某种自定义格式扔到XML中,然后用Java技术读取XML读取到之后再反射生成对象。
创建:
在src包上点击鼠标右键 选择"new" --> "other"
在弹出的对话框 输入 xml 然后选择下面的 XML File选项 点击 "next"
在弹出的页面中我们填写XML文件的文件名 applicationContext.xml
点击 Finish 完成XML的创建
编写需要的数据
现在我们的设定是在程序中不能new 类的对象,那么这样的情况下我们就把要创建对象的类放在XML中然后我们读取XML中的类用反射在程序运行期间创建对象
<?xml version="1.0" encoding="UTF-8"?> <beans> <bean id="userDAO" class="com.hnxy.dao.impl.UserDAOImpl" /> <bean id="userService" class="com.hnxy.service.impl.UserServiceImpl" /> </beans>
开始读取XML的内容
此处解析XML我们使用的是DOM4J工具
(dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。)
DOM4J使用以下jar包用来解析XML
具体步骤如下
// 获取XML的位置 InputStream in = this.getClass().getClassLoader().getResourceAsStream("applicationContext.xml"); try { // 开始解析 // 1. 将XML加载到内存中 这个步骤相当于把字节流转换为内存中的XML文件 Document document = new SAXReader().read(in); // 2. 获取XML的根节点 beans Element root = document.getRootElement(); // 3. 找到根节点下的所有bean的子节点 List<Element> elements = root.elements("bean"); // 4. 解析其中的id属性和value属性 for (Element element : elements) { // 获取ID属性 String id = element.attributeValue("id"); String clazz = element.attributeValue("class"); System.out.println(id+":"+clazz); } } catch (DocumentException e) { e.printStackTrace(); }
结果 :
看到这个结果其实我们应该能想到一个问题,如果我们拿类名创建对象 然后拿ID值作为key的话,将这些创建的对象再保存到一个Map集合里去,程序用到的时候用map的key获取某个对象这样我们就不用new这个对象了
这个工具类可以通过读取XML的形式创建其他类的对象,也就是说创建所有类的对象都可以通过这一个类来创建,那么这个专门用来创建对象的类就是对象工厂类,而这种设计模式被叫做简单工厂设计模式
简单工厂模式获取目标对象有什么好处呢?使用工厂模式隐藏创建对象细节,这样可以统一对象管理,如果要修改某些实例对象只需要修改工厂方法即可,这样引用工厂的那些个类都不用修改,
package com.hnxy.utils; import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class BeanFactory { // 定义对象保存容器 private static Map<String, Object> objs = new HashMap<String, Object>(); static { // 获取XML的位置 InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("applicationContext.xml"); try { // 开始解析 // 1. 将XML加载到内存中 这个步骤相当于把字节流转换为内存中的XML文件 Document document = new SAXReader().read(in); // 2. 获取XML的根节点 beans Element root = document.getRootElement(); // 3. 找到根节点下的所有bean的子节点 List<Element> elements = root.elements("bean"); // 4. 解析其中的id属性和value属性 for (Element element : elements) { // 获取ID属性 String id = element.attributeValue("id"); String clazz = element.attributeValue("class"); // 通过类名创建对象 Object obj = Class.forName(clazz).newInstance(); // 保存到MAP集合 objs.put(id, obj); } } catch (Exception e) { e.printStackTrace(); } } public static Object getBean(String id) { return objs.get(id); } public static void main(String[] args) { System.out.println(BeanFactory.getBean("userDAO")); } }
使用自定义IOC框架
我们已经编写完了自己的创建对象的工具类,这样如果哪个地方需要这个对象我们就可以调用方法获取这个对象了
所以我们一般都要用工厂这种方式进行解耦和而这种方式叫做 控制反转的方式进行解耦和
什么是控制反转?Inversion of Control,缩写为IoC
对象的创建权限 由 本类 交给了工厂创建,对这种对象创建权限的移交 --> 控制反转(IOC)
以上是关于(ICO)XML的主要内容,如果未能解决你的问题,请参考以下文章
xml Eclipse模板(代码片段)检查参数并最终抛出IllegalArgumentException