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

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

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

    我的漫漫程序之旅

    專注于JavaWeb開發(fā)
    隨筆 - 39, 文章 - 310, 評(píng)論 - 411, 引用 - 0
    數(shù)據(jù)加載中……

    簡(jiǎn)單模擬spring的容器管理bean

    package com.spring;

    import java.io.IOException;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;

    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;
    import org.jdom.xpath.XPath;

    import com.vo.BeanDefinition;

    /**
     * 簡(jiǎn)單模擬spring的ClassPathXmlApplicationContext spring容器管理bean
     * 
     * 
    @author zdw
     * 
     
    */

    @SuppressWarnings(
    "unchecked")
    public class MyApplicationContext
    {
        
    private List<BeanDefinition> list = new ArrayList<BeanDefinition>();
        
    private Map<String, Object> sigletons = new HashMap<String, Object>();

        
    public MyApplicationContext(String fileName)
        
    {
            
    this.readXML(fileName);
            
    try
            
    {
                instanceBeans();
            }

            
    catch (Exception e)
            
    {
                e.printStackTrace();
            }

        }


        
    /**
         * 實(shí)例化所有bean
         * 
         * 
    @throws InstantiationException
         * 
    @throws IllegalAccessException
         * 
    @throws ClassNotFoundException
         
    */

        
    private void instanceBeans() throws InstantiationException,
                IllegalAccessException, ClassNotFoundException
        
    {
            
    for (BeanDefinition bean : list)
            
    {
                
    if (null != bean.getClassName() && bean.getClassName().length() > 0)
                    sigletons.put(bean.getId(), Class.forName(bean.getClassName())
                            .newInstance());
            }

        }


        
    /**
         * 讀取xml配置
         * 
         * 
    @param fileName
         
    */

        
    public void readXML(String fileName)
        
    {
            SAXBuilder builder 
    = new SAXBuilder();
            URL url 
    = this.getClass().getClassLoader().getResource(fileName);
            
    try
            
    {
                Document doc 
    = builder.build(url);
                XPath xpath 
    = XPath.newInstance("//ns:beans/ns:bean");
                xpath.addNamespace(
    "ns",
                        
    "http://www.springframework.org/schema/beans");
                List
    <Element> beans = xpath.selectNodes(doc);
                
    for (Element bean : beans)
                
    {
                    String id 
    = bean.getAttributeValue("id");
                    String className 
    = bean.getAttributeValue("class");
                    BeanDefinition beanDefinition 
    = new BeanDefinition(id,
                            className);
                    list.add(beanDefinition);
                }


            }

            
    catch (JDOMException e)
            
    {
                e.printStackTrace();
            }

            
    catch (IOException e)
            
    {
                e.printStackTrace();
            }

        }


        
    /**
         * 得到指定id的bean
         * 
         * 
    @param id
         * 
    @return
         
    */

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

    }

    測(cè)試:
    @Test
        
    public void testMyUserService()
        
    {
            MyApplicationContext ctx 
    = new MyApplicationContext("beans.xml");
            UserService us 
    = (UserService) ctx.getBean("userService");
            us.print();
        }
    下載地址1
    下載地址2

    posted on 2009-01-22 11:00 々上善若水々 閱讀(1573) 評(píng)論(2)  編輯  收藏

    評(píng)論

    # re: 簡(jiǎn)單模擬spring的容器管理bean  回復(fù)  更多評(píng)論   

    哈哈,簡(jiǎn)單的對(duì)象管理器,你的依賴呢! 沒(méi)啥用!
    2009-01-26 10:05 | Jack.Wang

    # re: 簡(jiǎn)單模擬spring的容器管理bean[未登錄](méi)  回復(fù)  更多評(píng)論   

    @Jack.Wang
    簡(jiǎn)單便于我們理解spring的原理。
    2009-01-29 09:07 | angel

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日本免费人成在线网站| 亚洲日韩国产欧美一区二区三区 | 亚洲欧洲精品成人久久曰| 精品国产亚洲一区二区三区| 久久久精品国产亚洲成人满18免费网站| 亚洲精品国精品久久99热| caoporn成人免费公开| 亚洲高清国产拍精品26U| 亚欧色视频在线观看免费| 好湿好大好紧好爽免费视频 | 国产成人在线免费观看| 免费人成再在线观看网站| 伊人亚洲综合青草青草久热| 色欲A∨无码蜜臀AV免费播| 日本亚洲精品色婷婷在线影院| 国产精品免费播放| 最近中文字幕无吗高清免费视频| 国产亚洲男人的天堂在线观看| 亚洲精品国产精品乱码不99| 亚洲精品视频在线看| www.亚洲精品.com| 99久久99久久精品免费观看 | 国产大片51精品免费观看| 国产香蕉九九久久精品免费| 9久热这里只有精品免费| 一级做a爰片久久免费| 亚洲不卡1卡2卡三卡2021麻豆| 亚洲国产婷婷综合在线精品| 日本免费人成黄页在线观看视频| 免费在线看污视频| 亚洲色图综合网站| 亚洲国产专区一区| 国产偷窥女洗浴在线观看亚洲| 日韩精品无码区免费专区| 免费精品国产自产拍在| 99久久国产精品免费一区二区| 亚洲AV无码AV男人的天堂不卡| 在线观看亚洲一区二区| 亚洲的天堂av无码| 亚洲av无码专区国产乱码在线观看| 日韩一区二区三区免费体验|