我的漫漫程序之旅

          專注于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 々上善若水々 閱讀(1574) 評論(2)  編輯  收藏

          評論

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

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

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

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

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


          網站導航:
           
          主站蜘蛛池模板: 桦川县| 霞浦县| 万宁市| 岢岚县| 凌海市| 康平县| 启东市| 济源市| 汤原县| 榆树市| 七台河市| 大田县| 沾益县| 贵港市| 灵山县| 喀喇沁旗| 离岛区| 岳池县| 东丽区| 雷州市| 涿州市| 凌海市| 喜德县| 文水县| 浦城县| 大邑县| 阿拉善左旗| 和静县| 乳源| 鄂托克旗| 济阳县| 高唐县| 柘城县| 郑州市| 胶州市| 龙江县| 镇沅| 仁寿县| 九江市| 上栗县| 宁蒗|