posts - 17,  comments - 12,  trackbacks - 0

          import java.beans.Introspector;
          import java.beans.PropertyDescriptor;
          import java.lang.reflect.Method;
          import java.net.URL;
          import java.util.ArrayList;
          import java.util.HashMap;
          import java.util.List;
          import java.util.Map;

          import org.apache.commons.beanutils.ConvertUtils;
          import org.dom4j.Document;
          import org.dom4j.Element;
          import org.dom4j.XPath;
          import org.dom4j.io.SAXReader;

          public class wyzClassPathXMLApplicationContext {
           
           private List<BeanDefinition> beanDefines = new ArrayList<BeanDefinition>();
           private Map<String,Object> sigletons =new HashMap<String,Object>();
           
           
           public wyzClassPathXMLApplicationContext(String filename){
            this.readXML(filename);
            this.instanceBeans();
            this.injectObject();
            
            
            
           }
           private void injectObject() {
            for(BeanDefinition beanDefinition : beanDefines){
             
             Object bean=sigletons.get(beanDefinition.getId());
             if(bean!=null){
             try{
             
              PropertyDescriptor[] ps = Introspector.getBeanInfo(bean.getClass()).getPropertyDescriptors();
              for(PropertyDefinition propertyDefinition: beanDefinition.getPropertys()){
               for(PropertyDescriptor properdesc :ps){
                if(propertyDefinition.getName().equals(properdesc.getName())){
                 Method setter=properdesc.getWriteMethod();
                 if(setter!=null){
                  Object value =null;
                   if(propertyDefinition.getRef()!=null && !"".equals(propertyDefinition.getRef().trim())){
                        value = sigletons.get(propertyDefinition.getRef());

                    }else{
                      value = ConvertUtils.convert(propertyDefinition.getValue(),properdesc.getPropertyType());
                    }
                      setter.setAccessible(true);
                      setter.invoke(bean, value);
                 }
                 break;
                }
               }
              
                }
              
             }catch(Exception e){
              e.printStackTrace();
             
              
             
               
              }
              
             }
            }
            
           }
           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();
             }
            }
            
           }
           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("http://ns:beans/ns:bean");//創(chuàng)建/beans/bean的查詢路徑
                 
                  xsub.setNamespaceURIs(nsMap);//設(shè)置命名空間
                  List<Element> beans = xsub.selectNodes(document);//獲取文檔中所有bean節(jié)點(diǎn)
                  for(Element element : beans){
                      String id = element.attributeValue("id");//獲取id屬性
                      String clazz = element.attributeValue("class");//獲得所有class屬性
                      BeanDefinition beanDefine = new BeanDefinition(id,clazz);
                     
                      XPath propertysub = element.createXPath("ns:property");
                      propertysub.setNamespaceURIs(nsMap);
                      List<Element> propertys = propertysub.selectNodes(element);
                      for(Element property: propertys){
                       String propertyname = property.attributeValue("name");
                       String propertyref=property.attributeValue("ref");
                       String propertyvalue=property.attributeValue("value");
                      
                       System.out.println(propertyname+propertyref+ propertyvalue);
                      
                       PropertyDefinition propertyDefinition = new PropertyDefinition(propertyname,propertyref,propertyvalue);
                       beanDefine.getPropertys().add(propertyDefinition);
                      
                      
                      }
                     
                      beanDefines.add(beanDefine);
                     
                  }
                 
                 }catch(Exception e){
                  e.printStackTrace();
                 
                 }
                
            
           }
           public Object getBean(String beanName){
               return this.sigletons.get(beanName);
              
           }

          }

          posted on 2009-03-31 16:05 asiawang 閱讀(329) 評(píng)論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          <2009年3月>
          22232425262728
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(3)

          隨筆檔案

          文章檔案

          友情連接

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          主站蜘蛛池模板: 衡山县| 黔西| 福鼎市| 临湘市| 三江| 宿州市| 华宁县| 长沙市| 鸡泽县| 抚松县| 应城市| 滁州市| 本溪市| 顺平县| 罗平县| 天门市| 平度市| 大安市| 同心县| 赤壁市| 巴楚县| 太湖县| 内江市| 通河县| 成都市| 门头沟区| 团风县| 巧家县| 临泽县| 海安县| 枣庄市| 赤壁市| 廉江市| 梅州市| 海南省| 阳西县| 逊克县| 新宾| 德昌县| 泰州市| 冀州市|