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

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

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

    wangflood

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

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

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

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


    主要類:ClassPathXmlApplicationContext,當然spring的這個類里有國際化等功能實現,這里就簡了。
    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")); // 構造文檔對象
            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
                    
    //相當于    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

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


    網站導航:
     
    主站蜘蛛池模板: 中文无码成人免费视频在线观看| 国产亚洲精品欧洲在线观看| 久久国产乱子伦精品免费看| 亚洲无线一二三四区手机| 美女又黄又免费的视频| 国产在线观看免费不卡| 自拍偷自拍亚洲精品播放| 国产午夜影视大全免费观看| 看成年女人免费午夜视频| 免费观看国产小粉嫩喷水| 在线观看亚洲电影| 亚洲AV无码之日韩精品| 九九九国产精品成人免费视频| 亚洲成片观看四虎永久| eeuss免费天堂影院| 国产亚洲一区二区精品| 9277手机在线视频观看免费| 亚洲人成影院在线高清| 成年女人免费视频播放体验区| 亚洲AV无码一区二区三区性色| 免费大片黄手机在线观看| 黄 色一级 成 人网站免费| 亚洲AV无码一区二区乱子伦| 最近中文字幕完整版免费高清| 亚洲国产最大av| 免费观看国产小粉嫩喷水| 丝袜捆绑调教视频免费区| 久久久久亚洲AV成人片| 成人黄动漫画免费网站视频 | 亚洲精品蜜桃久久久久久| 全免费a级毛片免费看| 亚洲国产成人在线视频| 在线日韩av永久免费观看| a毛片成人免费全部播放| 久久亚洲日韩看片无码| 日本牲交大片免费观看| a级毛片免费全部播放| 亚洲一级特黄特黄的大片| 亚洲午夜AV无码专区在线播放| 1000部拍拍拍18勿入免费视频软件 | 国产精品成人免费福利|