论坛首页 入门技术论坛

IoC的简易实现

浏览 2396 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-03-08  
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. }   
   发表时间:2007-03-08  
我晕 重新编辑一下
package com.viwo.bean.factory;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.digester.Digester;
import org.apache.log4j.Logger;

import com.viwo.bean.config.ConfigBean;
import com.viwo.bean.interceptor.InterceptorProxyFactory;
import com.viwo.sqlmap.config.SqlMapConfig;

/**
 * A simple IoC Container for beans, manage beans for you.
 * 
 * @author viwo 
 *  
 */
public class BeanFactory {

 private final static Logger logger = Logger.getLogger(SqlMapConfig.class);
 private Map configBeanMap = new HashMap();
 private static Map beanFactoryMap = new HashMap();
 
    /**
     * a static synchronized method to get the Bean from a gived beanId
     * 
     * @param beanId
     * @return Object
     */
 public static synchronized Object getBean(String beanId)
 {
  logger.info("[viwo]-->[enter getBean]");
  BeanFactory beanFactory = getBeanFactory();
  Map cfgMap = beanFactory.getConfigBeanMap();
  ConfigBean cfgBean = (ConfigBean)cfgMap.get(beanId);
  if(cfgBean == null)
  {
   //if there have not beanId will return null
   return null;
  }
  String transaction = cfgBean.getTransaction();
  Object beanObject = null;
  try 
  {
   beanObject = Class.forName(cfgBean.getType()).newInstance();
  } 
  catch (Exception e) 
  {
   e.printStackTrace();
  }
  
  Iterator itProperty = cfgBean.getPropertyMap().keySet().iterator();
  Iterator itRef = cfgBean.getRefMap().keySet().iterator();
  
  while(itProperty.hasNext())
  {
   String propertyName = itProperty.next().toString();
   String propertyValue = cfgBean.getPropertyMap().get(propertyName).toString();
   try 
   {
    BeanUtils.setProperty(beanObject, propertyName, propertyValue);
   } 
   catch (Exception e) 
   {
    e.printStackTrace();
   }
  }
  
  while(itRef.hasNext())
  {
   String refName = itRef.next().toString();
   String refValue = cfgBean.getRefMap().get(refName).toString();
   Object refObject = BeanFactory.getBean(refValue);
   try 
   {
    BeanUtils.setProperty(beanObject, refName, refObject);
   } 
   catch (Exception e) 
   {
    e.printStackTrace();
   }
  }
  //System.out.println(cfgBean.getType());
  if(transaction!=null&&!transaction.equals(""))
  {
   String[] trans = transaction.split(",");
   beanObject = InterceptorProxyFactory.getInterceptorProxyedObject(beanObject,trans);
  }
  return beanObject;
 }
 
    /**
     * a static synchronized method to get the BeanFactoryConfig
     *  
     * this method will initialize the properity of BeanFactory 
     * 
     * @return BeanFactory
     */
 private static synchronized BeanFactory getBeanFactory()
 {
  BeanFactory beanFactory = null;
  String path = "bean-config.xml";
  if(beanFactoryMap.get(path)==null)
  {
   Digester digester = new Digester();  
      digester.setValidating(false); 
      digester.addObjectCreate("beans", "com.viwo.bean.factory.BeanFactory");
      
      digester.addObjectCreate("beans/bean", "com.viwo.bean.config.ConfigBean");
      
      digester.addSetProperties("beans/bean");
      
      digester.addCallMethod("beans/bean/property", "setProperty", 2);
      digester.addCallParam("beans/bean/property", 0, "name");
      digester.addCallParam("beans/bean/property", 1, "value");
      
      digester.addCallMethod("beans/bean/ref", "setRef", 2);
         digester.addCallParam("beans/bean/ref", 0, "name");
      digester.addCallParam("beans/bean/ref", 1, "value");
      
      digester.addSetNext("beans/bean", "addConfigBean", "com.viwo.bean.config.ConfigBean");
      
      try 
      {
       beanFactory = (BeanFactory)digester.parse(Thread.currentThread().getContextClassLoader().getResource("/"+path).getFile());
       beanFactoryMap.put(path, beanFactory);
      } 
   catch (Exception e)
   {
    System.out.println(e.getMessage());
   }
  }
  else
  {
   beanFactory = (BeanFactory)beanFactoryMap.get(path);
  }
  return beanFactory;
 }
 public void addConfigBean(ConfigBean configBean)
 {
  configBeanMap.put(configBean.getId(), configBean);
 }
 public Map getConfigBeanMap() 
 {
  return configBeanMap;
 }
 
}

0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics