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

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

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

    隨筆-21  評論-29  文章-0  trackbacks-0
    通過第一個實例我們會有一個疑問,Spring到底是怎么管理Bean的呢?
    我們來模擬Spring的內部實現
    在junit.test下新建ItcastClassPathXMLApplicationContext

    類的完全代碼(這里要引入dom4j的jar包)
    package junit.test;

    import java.net.URL;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Map;

    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.XPath;
    import org.dom4j.io.SAXReader;

    /**
     * 傳智傳客版容器
     *
     
    */

    public class ItcastClassPathXMLApplicationContext {
        
    private List<BeanDefinition> beanDefines = new ArrayList<BeanDefinition>();
        
    private Map<String, Object> sigletons = new HashMap<String, Object>();
        
        
    public ItcastClassPathXMLApplicationContext(String filename){
            
    this.readXML(filename);
            
    this.instanceBeans();
        }

        
    /**
         * 完成bean的實例化
         
    */

        
    private void instanceBeans() {
            
    for(BeanDefinition beanDefinition : beanDefines){
                
    try {
                    
    if(beanDefinition.getClassName()!=null && !"".equals(beanDefinition.getClassName().trim()))
                        sigletons.put(beanDefinition.getId(), Class.forName(beanDefinition.getClassName()).newInstance());
                }
     catch (Exception e) {
                    e.printStackTrace();
                }

            }

            
        }

        
    /**
         * 讀取xml配置文件
         * 
    @param filename
         
    */

        
    private void readXML(String filename) {
               SAXReader saxReader 
    = new SAXReader();   
                Document document
    =null;   
                
    try{
                 URL xmlpath 
    = this.getClass().getClassLoader().getResource(filename);
                 document 
    = saxReader.read(xmlpath);
                 Map
    <String,String> nsMap = new HashMap<String,String>();
                 nsMap.put(
    "ns","http://www.springframework.org/schema/beans");//加入命名空間
                 XPath xsub = document.createXPath("//ns:beans/ns:bean");//創建beans/bean查詢路徑
                 xsub.setNamespaceURIs(nsMap);//設置命名空間
                 List<Element> beans = xsub.selectNodes(document);//獲取文檔下所有bean節點 
                 for(Element element: beans){
                    String id 
    = element.attributeValue("id");//獲取id屬性值
                    String clazz = element.attributeValue("class"); //獲取class屬性值        
                    BeanDefinition beanDefine = new BeanDefinition(id, clazz);
                    beanDefines.add(beanDefine);
                 }
       
                }
    catch(Exception e){   
                    e.printStackTrace();
                }

        }

        
    /**
         * 獲取bean實例
         * 
    @param beanName
         * 
    @return
         
    */

        
    public Object getBean(String beanName){
            
    return this.sigletons.get(beanName);
        }

    }


    新建BeanDefinition ,用來存放bean里面的兩個屬性 id 和 className。
    package junit.test;

    public class BeanDefinition {
        
    private String id;
        
    private String className;
        
        
    public BeanDefinition(String id, String className) {
            
    this.id = id;
            
    this.className = className;
        }

        
    public String getId() {
            
    return id;
        }

        
    public void setId(String id) {
            
    this.id = id;
        }

        
    public String getClassName() {
            
    return className;
        }

        
    public void setClassName(String className) {
            
    this.className = className;
        }

        
    }


    修改SpringTest代碼 測試程序
    package junit.test;
    import org.junit.BeforeClass;
    import org.junit.Test;
    import cn.itcast.service.PersonService;

    public class SpringTest {

        @BeforeClass
        
    public static void setUpBeforeClass() throws Exception {
        }


        @Test 
    public void instanceSpring(){
            ItcastClassPathXMLApplicationContext ctx 
    = new ItcastClassPathXMLApplicationContext("beans.xml");
            PersonService personService 
    = (PersonService)ctx.getBean("personService");
            personService.save();
        }

    }


    執行測試 控制臺輸出為


    說明我們新建的傳智播客容器取到了bean實例 并成功地調用了save方法
    通過實例,我們就可以理解Spring是創建和管理bean的!

    小黑spring學習源代碼 參考源代碼
    posted on 2009-05-06 14:03 特立獨行 閱讀(445) 評論(0)  編輯  收藏 所屬分類: Spring框架
    主站蜘蛛池模板: 毛片a级毛片免费播放100| 99在线免费观看视频| 蜜桃精品免费久久久久影院| 亚洲嫩草影院在线观看| 国产免费丝袜调教视频| 亚洲一区电影在线观看| 嫩草视频在线免费观看| 亚洲AV无码男人的天堂| 亚洲另类春色国产精品| 99re热免费精品视频观看 | 麻豆国产精品入口免费观看| 国产精品亚洲综合久久| 国产资源免费观看| 亚洲男女一区二区三区| 无码一区二区三区AV免费| 亚洲精品无码不卡在线播放| 又大又硬又爽免费视频| 国产一级a毛一级a看免费视频| 亚洲国产精品一区第二页| 四虎最新永久免费视频| 亚洲av色影在线| 国产99精品一区二区三区免费| 国产亚洲自拍一区| 四虎成人精品永久免费AV| 亚洲人成综合在线播放| 免费a级毛片大学生免费观看| 国产vA免费精品高清在线观看 | 亚洲国产精品久久久久婷婷老年| 57PAO成人国产永久免费视频| 疯狂做受xxxx高潮视频免费| 成年在线观看网站免费| 免费精品视频在线| 国产免费av一区二区三区| h片在线观看免费| 在线免费观看亚洲| 四只虎免费永久观看| 久久久久国产精品免费免费不卡 | 香蕉视频在线观看免费| 亚洲av日韩av天堂影片精品| 四虎在线免费播放| 无码精品国产一区二区三区免费|