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("//ns:beans/ns:bean");//创建/beans/bean的查询路径
       
        xsub.setNamespaceURIs(nsMap);//设置命名空间
        List<Element> beans = xsub.selectNodes(document);//获取文档中所有bean节点
        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 阅读(319) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(3)

随笔档案

文章档案

友情连接

搜索

  •  

最新评论

阅读排行榜