1. 写一个工具类,实现ApplicationContextAware接口
public class SpringBean implements ApplicationContextAware {
private static ApplicationContext context;
/**
* 获取静态变量中的ApplicationContext.
*/
public static ApplicationContext getApplicationContext() {
assertContextInjected();
return context;
}
/**
* 实现ApplicationContextAware接口, 注入Context到静态变量中.
*/
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
SpringBean.context = context;
}
/**
* 获取spring容器中的bean
* @param beanId
* @param clazz
* @return
*/
public static <T> T getBean(String beanId, Class<T> clazz) {
return context.getBean(beanId, clazz);
}
/**
* 获取spring容器中的bean
* @param beanId
* @param clazz
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String beanId) {
return (T)context.getBean(beanId);
}
/**
* 获取spring容器中的bean
* @param clazz
* @return
*/
public static <T> T getBean(Class<T> clazz) {
return context.getBean(clazz);
}
/**
* 判断是否存在bean
* @param name
* @return
*/
public static boolean containsBean(String name) {
return context.containsBean(name);
}
/**
* 检查ApplicationContext不为空.
*/
private static void assertContextInjected() {
Validate.validState(context != null,
"applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder.");
}
}
2. 在spring配置文件中,配置工具类,以便Spring扫描时,自动调用该Bean的setApplicationContextAware()方法,实例化applicationContext变量
<bean id="springBeanUtil" class="com.tools.SpringBean" />
3. 在类中就可以直接调用
SpringBean.getBean(DataDictionaryService.class);