问题1:
有个异步线程Runnable里面需要用到dao,无法通过AutoWired和compoment注解传递进来。
于是希望通过Spring context主动去获取bean。
问题2:
getBean(name)获取失败。
解决:
默认的dao的name=类名(首字母小写)
例如:
接口名称:TemplateDao 则getName(“templateDao”)即可
通用的SpringContextUtil获取Bean
- 1.实现ApplicationContextAware接口
/**
* spring上下文配置
* @author Mingchenchen
*
*/
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static Logger logger = Logger.getLogger(SpringContextUtil.class);
private static ApplicationContext applicationContext = null;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
{
logger.info("------SpringContextUtil setApplicationContext-------");
SpringContextUtil.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 注意 bean name默认 = 类名(首字母小写)
* 例如: A8sClusterDao = getBean("k8sClusterDao")
* @param name
* @return
* @throws BeansException
*/
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
/**
* 根据类名获取到bean
* @param <T>
* @param clazz
* @return
* &