spring動態加載bean的方法

通過以下方法動態獲取spring bean,主要用於通過一個bean字符串轉換成bean的實例。

1、定義bean上下文操作方法

 

 

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;

import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * @author zhanjun
 * sping bean 操作 工具類
 * 一定要在spring.xml中加上:
<bean id="SpringContextUtil " class="com.taobao.lifeactivity.util.SpringContextUtil " singleton="true" />
當對SpringContextUtil 實例時就自動設置applicationContext,以便後來可直接用applicationContext
 */
public class SpringContextUtil implements ApplicationContextAware{


	private static ApplicationContext applicationContext;     //Spring應用上下文環境

	/**
	* 實現ApplicationContextAware接口的回調方法,設置上下文環境  
	* @param applicationContext
	* @throws BeansException
	*/
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
	    SpringContextUtil.applicationContext = applicationContext;
	}

	/**
	* @return ApplicationContext
	*/
	public static ApplicationContext getApplicationContext() {
	    return applicationContext;
	}

	/**
	* 獲取對象  
	* @param name
	* @return Object 一個以所給名字註冊的bean的實例
	* @throws BeansException
	*/
	public static Object getBean(String name) throws BeansException {
	    return applicationContext.getBean(name);
	}

	/**
	* 獲取類型爲requiredType的對象
	* 如果bean不能被類型轉換,相應的異常將會被拋出(BeanNotOfRequiredTypeException)
	* @param name       bean註冊名
	* @param requiredType 返回對象類型
	* @return Object 返回requiredType類型對象
	* @throws BeansException
	*/
	public static Object getBean(String name, Class requiredType) throws BeansException {
	    return applicationContext.getBean(name, requiredType);
	}

	/**
	* 如果BeanFactory包含一個與所給名稱匹配的bean定義,則返回true
	* @param name
	* @return boolean
	*/
	public static boolean containsBean(String name) {
	    return applicationContext.containsBean(name);
	}

	/**
	* 判斷以給定名字註冊的bean定義是一個singleton還是一個prototype。
	* 如果與給定名字相應的bean定義沒有被找到,將會拋出一個異常(NoSuchBeanDefinitionException)  
	* @param name
	* @return boolean
	* @throws NoSuchBeanDefinitionException
	* */
	public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
	    return applicationContext.isSingleton(name);
	}

	/**
	* @param name
	* @return Class 註冊對象的類型
	* @throws NoSuchBeanDefinitionException
	*/
	public static Class getType(String name) throws NoSuchBeanDefinitionException {
	    return applicationContext.getType(name);
	}

	/**
	* 如果給定的bean名字在bean定義中有別名,則返回這些別名  
	* @param name
	* @return
	* @throws NoSuchBeanDefinitionException
	*/
	public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
	    return applicationContext.getAliases(name);
	}
	}

 2、  在applicationContext.xml中定義單例工具

	<!--  Spring 工具類 -->
<bean id="SpringContextUtil " class="com.taobao.lifeactivity.util.SpringContextUtil " singleton="true" />

3、使用方法

	if (SpringContextUtil.containsBean(beanName)) {
			ILotteryBusinessService service = (ILotteryBusinessService) SpringContextUtil.getBean(beanName,
					ILotteryBusinessService.class); //動態加載spring bean
			if (null != service) {
				uservo = service.doLotteryBusiness(uservo);//bean的業務邏輯
			}
		}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章