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

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

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

    我的漫漫程序之旅

    專注于JavaWeb開發
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數據加載中……

    簡單模擬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;

    /**
     * 簡單模擬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();
            }

        }


        
    /**
         * 實例化所有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);
        }

    }

    測試:
    @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 々上善若水々 閱讀(1580) 評論(2)  編輯  收藏

    評論

    # re: 簡單模擬spring的容器管理bean  回復  更多評論   

    哈哈,簡單的對象管理器,你的依賴呢! 沒啥用!
    2009-01-26 10:05 | Jack.Wang

    # re: 簡單模擬spring的容器管理bean[未登錄]  回復  更多評論   

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

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲第一福利网站在线观看| 精品久久久久久久久免费影院| 亚洲国产一区视频| 韩国亚洲伊人久久综合影院| 亚洲综合久久一本伊伊区| 国产精品免费福利久久| 久久久久久久久亚洲| 久久综合给合久久国产免费| 亚洲天堂中文字幕| 国产又大又粗又长免费视频| 久久久久国产亚洲AV麻豆| 精品免费久久久久国产一区 | 免费网站看v片在线香蕉| 国产日产亚洲系列| a毛片免费全部播放完整成| 暖暖免费高清日本中文| 精品国产_亚洲人成在线| 久久亚洲国产成人影院网站| a级片免费观看视频| 亚洲美女免费视频| 在线免费一区二区| 一个人看的免费高清视频日本| 在线a毛片免费视频观看| 国产成人亚洲综合a∨| 亚洲美女又黄又爽在线观看| 国产亚洲精品91| 亚洲中文久久精品无码ww16| 亚洲视频在线观看免费| 亚洲伊人久久精品影院| 免费A级毛片无码A∨中文字幕下载| 亚洲欧洲春色校园另类小说| 真实国产乱子伦精品免费| 亚洲无吗在线视频| 亚洲中文字幕无码久久2017| 69视频在线观看免费| 国产亚洲人成在线播放| 亚洲AV色香蕉一区二区| 无码免费午夜福利片在线 | 亚洲一区二区三区无码国产| 久爱免费观看在线网站| 亚洲成aⅴ人在线观看|