通過以下方法動態獲取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的業務邏輯
}
}