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

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

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

    我的漫漫程序之旅

    專(zhuān)注于JavaWeb開(kāi)發(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)航:
     
    主站蜘蛛池模板: www一区二区www免费| 99ri精品国产亚洲| 国产成人青青热久免费精品| 18禁网站免费无遮挡无码中文| 特级精品毛片免费观看| 大地资源网高清在线观看免费| 一个人看的www视频免费在线观看 一个人看的免费观看日本视频www | 人人狠狠综合久久亚洲88| 久久影院亚洲一区| 亚洲精品综合久久| 丝袜熟女国偷自产中文字幕亚洲| 亚洲精品亚洲人成在线观看下载| 亚洲日韩在线中文字幕第一页| 亚洲精品A在线观看| 国产午夜亚洲不卡| 亚洲热线99精品视频| 亚洲精品你懂的在线观看 | 日韩国产免费一区二区三区| 999在线视频精品免费播放观看| 在线视频精品免费| 免费毛片在线看片免费丝瓜视频| 好吊妞998视频免费观看在线| 免费看美女被靠到爽的视频| 日韩亚洲精品福利| 亚洲色婷婷一区二区三区| 国产成人精品日本亚洲| 亚洲综合免费视频| 亚洲成a人片在线不卡| 亚洲精品动漫免费二区| 狠狠热精品免费观看| 好男人资源在线WWW免费| 久久精品免费视频观看| 手机看黄av免费网址| 在线观看亚洲免费| 中文字幕亚洲一区二区三区| 亚洲国产精品lv| 亚洲色无码国产精品网站可下载| 最好2018中文免费视频| 可以免费观看的毛片| 毛片大全免费观看| 亚洲乱码国产一区网址|