一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - java使用dom4j解析xml配置文件實現(xiàn)抽象工廠反射示例

java使用dom4j解析xml配置文件實現(xiàn)抽象工廠反射示例

2019-10-27 12:17java技術(shù)網(wǎng) JAVA教程

本文主要介紹了java使用dom4j讀取配置文件實現(xiàn)抽象工廠和反射的示例,在Java中也可以同Donet一樣,將差異配置在配置文件里面。另外,我們采用下面的方式實現(xiàn),將會更加便捷

邏輯描述:

現(xiàn)在我們想在B層和D層加上接口層,并使用工廠。而我們可以將創(chuàng)建B和創(chuàng)建D看作是兩個系列,然后就可以使用抽象工廠進(jìn)行創(chuàng)建了。

配置文件:beans-config.xml。service-class與dao-class分別對應(yīng)兩個系列的產(chǎn)品。子菜單中id對應(yīng)接口的命名空間,class對應(yīng)實現(xiàn)類的命名空間。

 

復(fù)制代碼代碼如下:

[html] view plaincopyprint? 

    <?xml version="1.0" encoding="UTF-8"?>   
    <beans>   
         <service-class>   
            <service id="com.xxjstgb.drp.basedata.manager.ItemManager" class="com.xxjstgb.drp.basedata.manager.ItemManagerImpl" />   
            <service id="com.xxjstgb.drp.flowcard.manager.FlowCardManager" class="com.xxjstgb.drp.flowcard.manager.impl.FlowCardManagerImpl" />   
         </service-class>   
         <dao-class>   
            <dao id="com.xxjstgb.drp.basedata.dao.ItemDao" class="com.xxjstgb.drp.basedata.dao.ItemDao4OracleImpl" />   
            <dao id="com.xxjstgb.drp.flowcard.dao.FlowCardDao" class="com.xxjstgb.drp.flowcard.dao.impl.FlowCardDaoImpl" />   
         </dao-class>   
    </beans>   

 

抽象工廠:BeanFactory。通過讀取配置文件,取得相關(guān)對象,并將相關(guān)創(chuàng)建好的對象保存在Map中。

復(fù)制代碼代碼如下:

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

    /**  
     * 抽象工廠,主要創(chuàng)建兩個系列的產(chǎn)品  
     * 1、Manager系列  
     * 2、Dao系列產(chǎn)品  
     * @author liuzhengquan  
     *  
     */   
    public class BeanFactory {   

        private static BeanFactory instance=new BeanFactory();   

        //系統(tǒng)缺省配置文件名稱   
        private final String beansConfigFile="beans-config.xml";   

        //保存Dao相關(guān)對象   
        private Document doc;   

        /*  
         * key=配置文件中的id值  
         * value=對應(yīng)了該Id的對象  
         */   
        private Map serviceMap = new HashMap();//保存Service相關(guān)對象   
        private Map daoMap = new HashMap();//保存Dao相關(guān)對象   

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

        /**  
         * 根據(jù)產(chǎn)品編號取得Service系列產(chǎn)品  
         * @param serviceId  
         * @return  
         */   
        public synchronized Object getServiceObject(Class c){   
            //如果存在相關(guān)對象實例,返回   
            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();   

                //將創(chuàng)建好的對象放到Map中   
                serviceMap.put(c.getName(), service);   
            } catch (Exception e) {   
                throw new RuntimeException();   
            }   
            return service;   
        }   

        /**  
         * 根據(jù)產(chǎn)品編號取得Dao系列產(chǎn)品  
         * @param daoId  
         * @return  
         */   
        public synchronized Object getDaoObject(Class c){   
            //如果存在相關(guān)對象實例,返回   
            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();   

                //將創(chuàng)建好的對象放到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);   
        }   

    }   
   

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 车上小婕子系列辣文小说 | 性导航h| 久久人妻少妇嫩草AV无码 | 欧美成人精品第一区二区三区 | 亚洲AV福利天堂一区二区三 | 日本精品久久久久中文字幕 1 | 男生同性视频twink在线 | 男男双性生子产乳高辣h | 日韩免费毛片视频杨思敏 | 国产一区二区视频在线播放 | 吉泽明步高清无码中文 | 亚洲精品www久久久久久久软件 | 日本高清视频在线观看 | 天天色综 | 新新电影理论中文字幕 | 天天做天天爽 | 闺蜜调教我做她的脚奴 | 精品久久洲久久久久护士免费 | 性派对videos18party| www.色呦呦.com| 午夜影院和视费x看 | 国语自产拍在线观看7m | 性满足久久久久久久久 | 天美传媒影视在线免费观看 | 欧美夫妇野外交换hd高清版 | 大香焦在线观看 | 国产亚洲高清国产拍精品 | 夫妇交换小说全文阅读 | 亚州精品视频 | 国产乱子伦在线观看不卡 | 美女张开下身让男人桶 | 国产精品视频免费一区二区三区 | 国内交换一区二区三区 | 俺去俺来也www色官网免费的 | 日本成年片高清在线观看 | 亚洲高清一区二区三区四区 | 好湿好紧太硬了我太爽了网站 | 30分钟的高清视频在线观看 | 丝袜足控免费网站xx动漫漫画 | 波多 在线播放 | 强插美女 |