记录一下自己遇到过的注入为空问题的解决办法
代码如下:
@Component
public class AtoboPipeline implements Pipeline {
@Autowired
private UrllistRepository urllistRepository;
private static AtoboPipeline atoboPipeline;
//通过@PostConstruct实现初始化bean之前进行的操作
@PostConstruct
public void init() {
atoboPipeline = this;
atoboPipeline.urllistRepository = this.urllistRepository;
}
//使用的时候这样使用
atoboPipeline.urllistRepository.save(urlList);
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
更新:今天跟同事研究了一下这块,发现不是没有初始化进来,而是调用方法的时候可能因为项目个性化处理创建的新的对象
而用上下文手动注入进来是没问题的。
这里我用的我们产品中心的BeanUtil.getBean()
UpgradeFieldUtil upgradeFieldUtil = BeanUtil.getBean(UpgradeFieldUtil.class);
这个BeanUtil是实现了ApplicationContextAware类,然后通过ApplicationContext的getBean方法
@Component
public class BeanUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (BeanUtil.applicationContext == null) {
BeanUtil.applicationContext = applicationContext;
}
}
// 获取applicationContext
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
// 通过name获取 Bean.
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
// 通过class获取Bean.
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
// 通过name,以及Clazz返回指定的Bean
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}