IoC的简易实现

java 代码
  1.   
  2. package com.viwo.bean.factory;   
  3.   
  4. import java.util.HashMap;   
  5. import java.util.Iterator;   
  6. import java.util.Map;   
  7.   
  8. import org.apache.commons.beanutils.BeanUtils;   
  9. import org.apache.commons.digester.Digester;   
  10. import org.apache.log4j.Logger;   
  11.   
  12. import com.viwo.bean.config.ConfigBean;   
  13. import com.viwo.bean.interceptor.InterceptorProxyFactory;   
  14. import com.viwo.sqlmap.config.SqlMapConfig;   
  15.   
  16. /**  
  17.  * A simple IoC Container for beans, manage beans for you.  
  18.  *   
  19.  * @author viwo   
  20.  *    
  21.  */  
  22. public class BeanFactory {   
  23.   
  24.  private final static Logger logger = Logger.getLogger(SqlMapConfig.class);   
  25.  private Map configBeanMap = new HashMap();   
  26.  private static Map beanFactoryMap = new HashMap();   
  27.     
  28.     /**  
  29.      * a static synchronized method to get the Bean from a gived beanId  
  30.      *   
  31.      * @param beanId  
  32.      * @return Object  
  33.      */  
  34.  public static synchronized Object getBean(String beanId)   
  35.  {   
  36.   logger.info("[viwo]-->[enter getBean]");   
  37.   BeanFactory beanFactory = getBeanFactory();   
  38.   Map cfgMap = beanFactory.getConfigBeanMap();   
  39.   ConfigBean cfgBean = (ConfigBean)cfgMap.get(beanId);   
  40.   if(cfgBean == null)   
  41.   {   
  42.    //if there have not beanId will return null   
  43.    return null;   
  44.   }   
  45.   String transaction = cfgBean.getTransaction();   
  46.   Object beanObject = null;   
  47.   try    
  48.   {   
  49.    beanObject = Class.forName(cfgBean.getType()).newInstance();   
  50.   }    
  51.   catch (Exception e)    
  52.   {   
  53.    e.printStackTrace();   
  54.   }   
  55.      
  56.   Iterator itProperty = cfgBean.getPropertyMap().keySet().iterator();   
  57.   Iterator itRef = cfgBean.getRefMap().keySet().iterator();   
  58.      
  59.   while(itProperty.hasNext())   
  60.   {   
  61.    String propertyName = itProperty.next().toString();   
  62.    String propertyValue = cfgBean.getPropertyMap().get(propertyName).toString();   
  63.    try    
  64.    {   
  65.     BeanUtils.setProperty(beanObject, propertyName, propertyValue);   
  66.    }    
  67.    catch (Exception e)    
  68.    {   
  69.     e.printStackTrace();   
  70.    }   
  71.   }   
  72.      
  73.   while(itRef.hasNext())   
  74.   {   
  75.    String refName = itRef.next().toString();   
  76.    String refValue = cfgBean.getRefMap().get(refName).toString();   
  77.    Object refObject = BeanFactory.getBean(refValue);   
  78.    try    
  79.    {   
  80.     BeanUtils.setProperty(beanObject, refName, refObject);   
  81.    }    
  82.    catch (Exception e)    
  83.    {   
  84.     e.printStackTrace();   
  85.    }   
  86.   }   
  87.   //System.out.println(cfgBean.getType());   
  88.   if(transaction!=null&&!transaction.equals(""))   
  89.   {   
  90.    String[] trans = transaction.split(",");   
  91.    beanObject = InterceptorProxyFactory.getInterceptorProxyedObject(beanObject,trans);   
  92.   }   
  93.   return beanObject;   
  94.  }   
  95.     
  96.     /**  
  97.      * a static synchronized method to get the BeanFactoryConfig  
  98.      *    
  99.      * this method will initialize the properity of BeanFactory   
  100.      *   
  101.      * @return BeanFactory  
  102.      */  
  103.  private static synchronized BeanFactory getBeanFactory()   
  104.  {   
  105.   BeanFactory beanFactory = null;   
  106.   String path = "bean-config.xml";   
  107.   if(beanFactoryMap.get(path)==null)   
  108.   {   
  109.    Digester digester = new Digester();     
  110.       digester.setValidating(false);    
  111.       digester.addObjectCreate("beans""com.viwo.bean.factory.BeanFactory");   
  112.          
  113.       digester.addObjectCreate("beans/bean""com.viwo.bean.config.ConfigBean");   
  114.          
  115.       digester.addSetProperties("beans/bean");   
  116.          
  117.       digester.addCallMethod("beans/bean/property""setProperty"2);   
  118.       digester.addCallParam("beans/bean/property"0"name");   
  119.       digester.addCallParam("beans/bean/property"1"value");   
  120.          
  121.       digester.addCallMethod("beans/bean/ref""setRef"2);   
  122.          digester.addCallParam("beans/bean/ref"0"name");   
  123.       digester.addCallParam("beans/bean/ref"1"value");   
  124.          
  125.       digester.addSetNext("beans/bean""addConfigBean""com.viwo.bean.config.ConfigBean");   
  126.          
  127.       try    
  128.       {   
  129.        beanFactory = (BeanFactory)digester.parse(Thread.currentThread().getContextClassLoader().getResource("/"+path).getFile());   
  130.        beanFactoryMap.put(path, beanFactory);   
  131.       }    
  132.    catch (Exception e)   
  133.    {   
  134.     System.out.println(e.getMessage());   
  135.    }   
  136.   }   
  137.   else  
  138.   {   
  139.    beanFactory = (BeanFactory)beanFactoryMap.get(path);   
  140.   }   
  141.   return beanFactory;   
  142.  }   
  143.  public void addConfigBean(ConfigBean configBean)   
  144.  {   
  145.   configBeanMap.put(configBean.getId(), configBean);   
  146.  }   
  147.  public Map getConfigBeanMap()    
  148.  {   
  149.   return configBeanMap;   
  150.  }   
  151.     
  152. }   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值