<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框架
    主站蜘蛛池模板: 亚洲成人高清在线观看| 亚洲免费日韩无码系列 | 青春禁区视频在线观看直播免费| 国产亚洲欧洲精品| 免费无码av片在线观看| 激情综合色五月丁香六月亚洲| 一区二区三区AV高清免费波多| 亚洲JIZZJIZZ中国少妇中文| 国产亚洲美女精品久久久久| 免费jjzz在在线播放国产| 爱情岛论坛亚洲品质自拍视频网站 | 成人亚洲国产精品久久| 天天摸天天操免费播放小视频| 亚洲男人天堂2022| 国产裸模视频免费区无码| 美女裸免费观看网站| 亚洲国产精品人人做人人爱| 中文字幕在线成人免费看| 亚洲制服中文字幕第一区| 亚洲视频在线免费看| wwwxxx亚洲| 免费一级毛片正在播放| 精品国产呦系列在线观看免费| 久久亚洲国产精品五月天| 一级女人18毛片免费| 亚洲AV成人无码久久WWW| 亚洲精品视频免费| 久久国产精品免费看| 国产成+人+综合+亚洲专| 免费在线观看的黄色网址| 日本高清不卡aⅴ免费网站| 亚洲黄色免费网站| 色www永久免费视频| 中文在线免费不卡视频| 91午夜精品亚洲一区二区三区| 国产精品深夜福利免费观看| 免费在线看黄网站| 亚洲乱色熟女一区二区三区蜜臀| 国产亚洲自拍一区| av大片在线无码免费| 一级毛片视频免费观看|