XML操作工具类

        在XML文件配置写入类名,提取配置文件创建对象的例子

        为了可扩展性和类和类之间解耦,对抽象层的具体实现类的实例化,不直接使用new关键字来创建对象,而是将类名写入配置文件,再由Java反射机制,读取XML文件,根据文件里的类的名字生成对象。如将一个具体工厂类类名存储在下面的XML文档中:  

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <className>com.whpu.abstractFactory.CashPayFactory</className>
</config>

//类的名称应该为全限定名:包名+类名

           Java反射机制(Java Reflection)是指在程序运行时获取已知名称的类或已有对象的相关信息的一种机制,通过名字创建对象的例子如下:

//反射,用类名生产实例对象
Class c = Class.forName(cName);
Object obj = c.newInstance();

        通过引入DOM和反射机制后,可以在XMLUtil中实现读取xml文件并根据存储在xml文件中的类名获取对应的对象,详细代码如下:

import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.File;
//工具类
public class XMLUtil {
    //生成配置文件中一个名字的实例对象
    public static Object getBean(){
        try {
            //创建DOM对象
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            //文件解析器--由它读配置文件
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc;
            //用磁盘绝对路径表示配置文件
            doc = builder.parse(new File("D:\\qilinIDEA\\DesignPatterns\\_04AbstractFactory\\resource/config.xml"));

            //获取包含类名的文本节点
            NodeList nl = doc.getElementsByTagName("className");
            Node classNode = nl.item(0).getFirstChild();
            String cName = classNode.getNodeValue();

            //反射,用类名生产实例对象
            Class c = Class.forName(cName);
            Object obj = c.newInstance();
            return obj;
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
}

        使用工具类,直接调用XMLUtil工具类静态方法getBean()进行类的实例化,代码如下:

类型 对象 = (类型)XMLUtil.getBean();//getBean()返回类型是Object,要强制转换成指定类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值