<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框架
    主站蜘蛛池模板: 久久精品无码精品免费专区| 国产亚洲高清在线精品不卡| 男的把j放进女人下面视频免费| 亚洲精品天堂成人片?V在线播放| 精品亚洲视频在线| 全免费A级毛片免费看网站| 亚洲综合中文字幕无线码| 永久免费毛片在线播放| 亚洲无码一区二区三区| 最新69国产成人精品免费视频动漫 | 四色在线精品免费观看| 亚洲性无码一区二区三区| 白白国产永久免费视频| 女人裸身j部免费视频无遮挡| 亚洲一区二区三区在线播放| 青草久久精品亚洲综合专区| 无码欧精品亚洲日韩一区夜夜嗨| 免费福利在线观看| 77777亚洲午夜久久多人| 久久福利青草精品资源站免费| 亚洲AV综合色区无码一区| 91视频免费网址| 亚洲男人天堂2022| 亚洲国产精品激情在线观看| 羞羞视频免费网站在线看| 色拍自拍亚洲综合图区| 日韩精品成人无码专区免费| 久久无码av亚洲精品色午夜 | 午夜免费福利影院| 另类小说亚洲色图| 亚洲国产精品va在线播放| 91青青青国产在观免费影视| 亚洲熟伦熟女专区hd高清| 亚洲性日韩精品国产一区二区| 人妻在线日韩免费视频| 亚洲狠狠ady亚洲精品大秀| 暖暖免费高清日本中文| 久久毛片免费看一区二区三区| 久久夜色精品国产噜噜噜亚洲AV| 在线观看视频免费国语| 无遮挡a级毛片免费看|