<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框架
    主站蜘蛛池模板: 最新久久免费视频| 亚洲国产精品成人综合色在线| 亚洲人成网站18禁止一区| 国产无遮挡吃胸膜奶免费看| 日韩成人免费在线| 国产一区二区三区免费在线观看| 国产精品免费看久久久无码| 国产成人在线观看免费网站| 免费在线观看中文字幕| 亚洲国产精品成人网址天堂| 亚洲美女高清一区二区三区| 久久久久亚洲AV成人网人人软件| 亚洲午夜无码AV毛片久久| 伊人久久亚洲综合| 亚洲成A人片在线观看WWW| 久久亚洲AV成人无码软件| 亚洲成人动漫在线观看| 亚洲欧美一区二区三区日产| 亚洲欧美国产欧美色欲| 瑟瑟网站免费网站入口| 国产精品1024在线永久免费 | 情人伊人久久综合亚洲| 亚洲成年人在线观看| 亚洲成a人片毛片在线| 最新亚洲卡一卡二卡三新区| 国产天堂亚洲国产碰碰| 黄色视频在线免费观看| 91制片厂制作传媒免费版樱花 | 美女18毛片免费视频| 本道天堂成在人线av无码免费| 中文在线观看永久免费| 99视频在线精品免费| 成熟女人特级毛片www免费| 又爽又黄无遮挡高清免费视频| 自拍偷自拍亚洲精品被多人伦好爽| 亚洲AV中文无码乱人伦下载| 亚洲国产成人在线视频 | 亚洲国产精品无码一线岛国| 亚洲精品高清国产麻豆专区| 青草久久精品亚洲综合专区| 搡女人免费免费视频观看|