手机
当前位置:查字典教程网 >编程开发 >Java >java使用dom4j解析xml配置文件实现抽象工厂反射示例
java使用dom4j解析xml配置文件实现抽象工厂反射示例
摘要:逻辑描述:现在我们想在B层和D层加上接口层,并使用工厂。而我们可以将创建B和创建D看作是两个系列,然后就可以使用抽象工厂进行创建了。配置文件...

逻辑描述:

现在我们想在B层和D层加上接口层,并使用工厂。而我们可以将创建B和创建D看作是两个系列,然后就可以使用抽象工厂进行创建了。

配置文件:beans-config.xml。service-class与dao-class分别对应两个系列的产品。子菜单中id对应接口的命名空间,class对应实现类的命名空间。

复制代码 代码如下:

[html] view plaincopyprint?

<?xml version="1.0" encoding="UTF-8"?>

<beans>

<service-class>

<service id="com.xxjstgb.drp.basedata.manager.ItemManager" />

<service id="com.xxjstgb.drp.flowcard.manager.FlowCardManager" />

</service-class>

<dao-class>

<dao id="com.xxjstgb.drp.basedata.dao.ItemDao" />

<dao id="com.xxjstgb.drp.flowcard.dao.FlowCardDao" />

</dao-class>

</beans>

抽象工厂:BeanFactory。通过读取配置文件,取得相关对象,并将相关创建好的对象保存在Map中。

复制代码 代码如下:

[java] view plaincopyprint?

package com.xxjstgb.drp.util;

import java.util.HashMap;

import java.util.Map;

//dom4j

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

import com.xxjstgb.drp.basedata.dao.ItemDao;

import com.xxjstgb.drp.basedata.manager.ItemManager;

import com.xxjstgb.drp.flowcard.dao.FlowCardDao;

import com.xxjstgb.drp.flowcard.manager.FlowCardManager;

/**

* 抽象工厂,主要创建两个系列的产品

* 1、Manager系列

* 2、Dao系列产品

* @author liuzhengquan

*

*/

public class BeanFactory {

private static BeanFactory instance=new BeanFactory();

//系统缺省配置文件名称

private final String beansConfigFile="beans-config.xml";

//保存Dao相关对象

private Document doc;

/*

* key=配置文件中的id值

* value=对应了该Id的对象

*/

private Map serviceMap = new HashMap();//保存Service相关对象

private Map daoMap = new HashMap();//保存Dao相关对象

private BeanFactory(){

try {

doc=new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream(beansConfigFile));

} catch (DocumentException e) {

e.printStackTrace();

throw new RuntimeException();

}

}

public static BeanFactory getInstance(){

return instance;

}

/**

* 根据产品编号取得Service系列产品

* @param serviceId

* @return

*/

public synchronized Object getServiceObject(Class c){

//如果存在相关对象实例,返回

if(serviceMap.containsKey(c.getName())){

return serviceMap.get(c.getName());

}

Element beanElt=(Element)doc.selectSingleNode("//service[@id=""+ c.getName() + ""]");

String className=beanElt.attributeValue("class");

Object service=null;

try {

service=Class.forName(className).newInstance();

//将创建好的对象放到Map中

serviceMap.put(c.getName(), service);

} catch (Exception e) {

throw new RuntimeException();

}

return service;

}

/**

* 根据产品编号取得Dao系列产品

* @param daoId

* @return

*/

public synchronized Object getDaoObject(Class c){

//如果存在相关对象实例,返回

if(daoMap.containsKey(c.getName())){

return daoMap.get(c.getName());

}

Element beanElt=(Element)doc.selectSingleNode("//dao[@id=""+c.getName()+""]");

String className=beanElt.attributeValue("class");

Object dao=null;

try {

dao=Class.forName(className).newInstance();

//将创建好的对象放到Map中

daoMap.put(c.getName(), dao);

} catch (Exception e) {

throw new RuntimeException();

}

return dao;

}

/**

* 测试

* @param args

*/

public static void main(String[] args){

ItemManager itemManager=(ItemManager)BeanFactory.getInstance().getServiceObject(ItemManager.class);

System.out.println("itemManager"+itemManager);

ItemDao itemDao=(ItemDao)BeanFactory.getInstance().getDaoObject(ItemDao.class);

System.out.println("itemDao:"+itemDao);

FlowCardManager flowCardManager=(FlowCardManager)BeanFactory.getInstance().getServiceObject(FlowCardManager.class);

//FlowCardManager flowCardManager=new FlowCardManagerImpl();

System.out.println(flowCardManager);

FlowCardDao flowCardDao=(FlowCardDao)BeanFactory.getInstance().getDaoObject(FlowCardDao.class);

//FlowCardDao flowCardDao=new FlowCardDaoImpl();

System.out.println("flowCardDao:"+flowCardDao);

}

}

【java使用dom4j解析xml配置文件实现抽象工厂反射示例】相关文章:

java使用dom4j操作xml示例代码

简单学习Java抽象类要点及实例

java文件复制代码片断(java实现文件拷贝)

java 文件名截取方法

java配置dbcp连接池(数据库连接池)示例分享

java字符串替换排序实例

java使用randomaccessfile在文件任意位置写入数据

java IO流文件的读写具体实例

java文件操作工具类分享(file文件工具类)

java实现浮点数转人民币的小例子

精品推荐
分类导航