<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    wangflood

    精心維護一個技術(shù)blog,為了工作,也是愛好。

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      14 Posts :: 19 Stories :: 8 Comments :: 0 Trackbacks
     spring IOC達到松耦合的目的,便于測試。我很喜歡"spirng容器"的說法,spring根據(jù)讀取bean.xml,再用java反射機制,組合一些類,完成程序。其實,實現(xiàn)起來也不太難。不信你看。

    模仿spring,BeanFactory
    package com.wang.spring;

    public interface BeanFactory {
        
    public Object getBean(String name);
    }


    主要類:ClassPathXmlApplicationContext,當(dāng)然spring的這個類里有國際化等功能實現(xiàn),這里就簡了。
    package com.wang.spring;

    import java.lang.reflect.Method;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.input.SAXBuilder;

    import wang.spring.dao.UserDao;
    import wang.spring.dao.impl.UserDaoImpl;

    public class ClassPathXmlApplicationContext implements BeanFactory {

        
    private Map<String, Object> beans = new HashMap<String, Object>();

        
    // IOC Inverse of Control DI Dependency Injection
        public ClassPathXmlApplicationContext() throws Exception {
            SAXBuilder sb 
    = new SAXBuilder();

            Document doc 
    = sb.build(this.getClass().getClassLoader()
                    .getResourceAsStream(
    "beans.xml")); // 構(gòu)造文檔對象
            Element root = doc.getRootElement(); // 獲取根元素HD
            List list = root.getChildren("bean");// 取名字為disk的所有元素
            for (int i = 0; i < list.size(); i++{
                Element element 
    = (Element) list.get(i);
                String id 
    = element.getAttributeValue("id");
                String clazz 
    = element.getAttributeValue("class");
                Object o 
    = Class.forName(clazz).newInstance();
                System.out.println(id);
                System.out.println(clazz);
                beans.put(id, o);
    //i=1  new UserDaoImpl();

                
    for (Element propertyElement : (List<Element>) element
                        .getChildren(
    "property")) {
                    String name 
    = propertyElement.getAttributeValue("name"); // 得到userDAO
                    String bean = propertyElement.getAttributeValue("bean"); // u
                    
    //相當(dāng)于    UserDao u = new UserDaoImpl();
                    Object beanObject = beans.get(bean);// UserDAOImpl instance

                    String methodName 
    = "set" + name.substring(01).toUpperCase()
                            
    + name.substring(1);
                    System.out.println(
    "method name = " + methodName);

                    Method m 
    = o.getClass().getMethod(methodName,
                            beanObject.getClass().getInterfaces()[
    0]);
                    m.invoke(o, beanObject);
                }


            }


        }


        
    public Object getBean(String id) {
            
    return beans.get(id);
        }


    }



    posted on 2010-11-14 09:46 wangflood 閱讀(281) 評論(0)  編輯  收藏 所屬分類: J2EE/SSH

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 50岁老女人的毛片免费观看| 国产免费播放一区二区| 2021精品国产品免费观看| 亚洲av网址在线观看| 男女午夜24式免费视频| 亚洲成人在线网站| 久久A级毛片免费观看| 亚洲伊人tv综合网色| 亚欧在线精品免费观看一区| 亚洲精品在线免费观看| 在线观看免费人成视频| 亚洲日韩av无码中文| 四虎1515hm免费国产| 国产黄在线播放免费观看| 久久夜色精品国产亚洲AV动态图| 国产精品免费大片| 亚洲一欧洲中文字幕在线| 免费观看一级毛片| 人体大胆做受免费视频| 亚洲va久久久噜噜噜久久天堂| 99在线观看视频免费| 亚洲乱码在线卡一卡二卡新区| 四虎免费永久在线播放| AAA日本高清在线播放免费观看| 77777_亚洲午夜久久多人| 国产一卡2卡3卡4卡2021免费观看| 亚洲欧洲免费无码| 中文字幕亚洲无线码| 免费在线视频你懂的| 亚洲成熟丰满熟妇高潮XXXXX| 国产91精品一区二区麻豆亚洲| 亚洲免费在线视频| 亚洲狠狠婷婷综合久久蜜芽| 国产亚洲大尺度无码无码专线 | 国产亚洲精品免费| 亚洲色自偷自拍另类小说| 久草视频免费在线观看| 无码免费又爽又高潮喷水的视频 | 亚洲娇小性xxxx| 国产亚洲成归v人片在线观看| 久草视频免费在线|