beanFactory

package com.byd.mes.util;


import java.io.Serializable;

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

import com.byd.mes.bussiness.bo.main.ShopOrderBO;
import com.byd.mes.bussiness.service.activity.Activity;
import com.byd.mes.util.cache.CacheManager;

public class BeanFactory implements ApplicationContextAware {
	private static final Log log = LogFactory.getLog(BeanFactory.class);
	private static ApplicationContext applicationContext;
	private static Map<String, String> systemParamters;
	private static PropertyConfigurer propertyConfigurer;
	public static final String INSTANCE_SINGLETON = "singleton";
	public static final String INSTANCE_PROTOTYPE = "prototype";
	private static Map clazzInstanceContext= new HashMap();
	
	public static final Map<String,ShopOrderBO> map=new HashMap<String,ShopOrderBO>();
	
	public static Object getBean(String beanName) {
		return applicationContext.getBean(beanName);
	}
	
	public static Activity getFunction(String className) {
		return getFunction(className,BeanFactory.INSTANCE_SINGLETON);
	}
	public static Activity getFunction(String className,String instanceType) {
		Object obj = getClazzIns(className,instanceType);
		if(!(obj instanceof Activity)) throw new RuntimeException("必须实现com.byd.mes.bussiness.service.siteoperation.sfc.Function接口");
		return (Activity) obj;
	}
	public static Object getClazzIns(String className,String instanceType) {
		try{
			if(StringUtils.equalsIgnoreCase(INSTANCE_SINGLETON,instanceType)){
				Object fn = clazzInstanceContext.get(className);
				if(fn == null){
					fn = BeanUtils.instantiateClass(Class.forName(className));
					clazzInstanceContext.put(className, fn);
				}
				return fn;
			}
			else if(StringUtils.equalsIgnoreCase(INSTANCE_PROTOTYPE,instanceType)){
				return BeanUtils.instantiateClass(Class.forName(className)) ;
			}			
		}catch(Exception ex){
			throw new RuntimeException("实例化类'"+className+"'失败 ->"+ex.getMessage(),ex);
		}
		throw new RuntimeException("实例化类'"+className+"'失败 ");
	}
	
	@Override
	public void setApplicationContext(ApplicationContext applicationContext)throws BeansException {
		log.info("set applicationContext to static>>>"+applicationContext);
		BeanFactory.applicationContext = applicationContext;
	}

	public static ApplicationContext getApplicationContext() {
		return applicationContext;
	}

	public static Map<String, String> getSystemParamters() {
		return (Map)propertyConfigurer.getProperties();
	}

	public void setPropertyConfigurer(PropertyConfigurer propertyConfigurer) {
		BeanFactory.propertyConfigurer = propertyConfigurer;
	}

}

 

posted @ 2011-08-05 09:45  上善¤若水  阅读(120)  评论(0编辑  收藏  举报