解决多线程下@Autowired无法注入
解决多线程下@Autowired无法注入
场景:
在使用爬虫框架Crawl4j时,由于Crawl4j采用多线程的方式,导致无法注入依赖:

这里@Autowired无法注入,redisTemplate一直为Null,所以不得不采用其他方式获取到redisTemplate。
解决方案:
采用手动获取Bean的形式获取。
创建一个工具类来获取Bean:
@Component
public class BeanContext implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
BeanContext.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) throws BeansException {
return (T)applicationContext.getBean(name);
}
public static <T> T getBean(Class<T> clz) throws BeansException {
return applicationContext.getBean(clz);
}
}
然后修改HtmlCrawler类如下:

即可获取到redisTemplate进行操作。
网络上志同道合,我们一起学习网络安全,一起进步,QQ群:694839022

浙公网安备 33010602011771号