在项目中想获取环境的bean,有很多方式。其中有根据request,还有本文写的实现ApplicationContextAware接口获取。
上代码
public class SpringApplicationContextHolder implements ApplicationContextAware{
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.context = applicationContext;
}
public static Object getSpringBean(String beanName) {
return context==null?null:context.getBean(beanName);
}
public static String[] getBeanDefinitionNames() {
return context.getBeanDefinitionNames();
}
}
单单这样是不行的,会出现context为null的问题,也就是说获取不到的。
需要在Spring的bean容器中注册才可以使用。
<bean class="com.ecfund.base.util.common.SpringApplicationContextHolder" lazy-init ="false"/>
让这个bean优先于其他bean加载才能成功。这就是lazy-init='false'的原因。
ThreadPoolTaskExecutor excutor = (ThreadPoolTaskExecutor) SpringApplicationContextHolder.getSpringBean("taskExecutor");
annotation的注解name是类名的首字母小写。
private TcategoryDAO tcategoryDAO;
tcategoryDAO = (TcategoryDAO) SpringApplicationContextHolder.getSpringBean("tcategoryDAO");