栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java使用dom4j解析xml配置文件实现抽象工厂反射示例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java使用dom4j解析xml配置文件实现抽象工厂反射示例

逻辑描述:

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

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

复制代码 代码如下:
[html] view plaincopyprint?

      
      
           
              
              
        
  
           
              
              
        
  
   
  

抽象工厂: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;  

      
    public class BeanFactory {  

        private static BeanFactory instance=new BeanFactory();  

        //系统缺省配置文件名称  
        private final String beansConfigFile="beans-config.xml";  

        //保存Dao相关对象  
        private document doc;  

          
        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;  
        }  

          
        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;  
        }  

          
        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;  
        }  

          
          
        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);  
        }  

    }  
   

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/152705.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号