`
viwo
  • 浏览: 220460 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

IoC的简易实现

    博客分类:
  • JAVA
阅读更多
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. }   
分享到:
评论
1 楼 piaochunzhi 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;
 }
 
}

相关推荐

    spring IOC 简易实现

    NULL 博文链接:https://zhengshuo.iteye.com/blog/573192

    IOC容器简单实现

    一个简单的IOC容器的java实现,一个简单的IOC容器的java实现

    模拟Spring的IoC容器实现注解自动装配

    自己实现的简易的模拟Spring的IoC容器,实现注解自动装配

    java代码实现简易版IOC容器!.docx

    java代码实现简易版IOC容器!.docx

    一个简单的模仿spring的ioc实现

    简单的模仿Spring Ioc 配置文件属性只支持id class name ref,其他的没做解析

    自主实现的简易Spring框架

    自主实现的简易Spring框架,通过注解实现IoC容器和AOP。

    Spring.NET学习笔记-实现一个简易的IoC框架

    在我们使用Spring.NET框架的时候,首先需要实例化Spring.NET容器, 然后调用IoC容器IObjectFactory接口中GetObject方法获取容器中的对象。通过这一点就可以告诉我们制作IoC容器需要写一个获取XML文件内容的方法和申明...

    手写简单实现ioc、aop事务demo

    手写简单实现ioc、aop事务demo,实现事务回滚,使用到了,工厂模式,动态代理

    自己写的类struts的简易的mvc实现+一个类Spring的IOC和简单AOP

    博文链接:https://flyinglife.iteye.com/blog/222772

    简易的手写springmvc

    本工程模仿了简易的springMVC的实现, 包含了controller、service、requestParam、autowired、requestMapping注解类的创建 IOC容器的创建及组装原理实现 简易的request请求

    Android项目源码ThinkAndroid开发框架.zip

    ThinkAndroid是一个免费的开源的、简易的、遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单、快速的进行 Android应用程序的开发,包含Android mvc、简易sqlite orm、ioc模块、封装Android httpclitent...

    Android ThinkAndroid开发框架.zip

    ThinkAndroid是一个免费的开源的、简易的、遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单、快速的进行 Android应用程序的开发,包含Android mvc、简易sqlite orm、ioc模块、封装Android httpclitent...

    Android应用orm和ioc开发框架

    是一个android的orm和ioc框架。同时封装了android中的Bitmap与Http操作的框架,使其更加简单易用;KJFrameForAndroid的设计思想是通过封装Android原生SDK中复杂的复杂操作而达到简化Android应用级开发,最终实现快速...

    Android项目源码ThinkAndroid开发框架

    ThinkAndroid是一个免费的开源的、简易的、遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单、快速的进行 Android应用程序的开发,包含Android mvc、简易sqlite orm、ioc模块、封装Android httpclitent...

    ThinkAndroid

    ThinkAndroid是一个免费的开源的、简易的、遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单、快速的进行 Android应用程序的开发,包含Android mvc、简易sqlite orm、ioc模块、封装Android httpclitent...

    ThinkAndroid是简易的、遵循Apache2开源协议发布的Android开发框架.zip

    其开发宗旨是简单、快速的进行 Android应用程序的开发,包含Android mvc、简易sqlite orm、ioc模块、封装Android httpcliten… 开发工具在软件开发生命周期中扮演着至关重要的角色,它们旨在简化和加速从概念设计...

    etmvc:一个简易高效的web开发框架

    简易但不简单,其设计和实现借鉴业界众多的优秀框架,如struts,spring mvc,ror,grails等, 力图为Java开发人员提供一套高效的开发框架。 基于java技术开发,继承其强大、稳定、安全、高效、跨平台等多方面的优点 ...

    c#版本的redis客户端.zip

    Generic String Hash Set ZSet List Stream HyperLogLog PubSub Lua tran pipelining ...为每个数据类型增加对应的模型返回 取消字典的返回(zset) ...增加 简易版ioc实现,方便 使用者替换实现(暂时不考虑)

Global site tag (gtag.js) - Google Analytics