在非controller层中依赖注入为null问题
我们在项目中,一般在controller层中注入service接口,在service层中注入其它的service接口或者mapper接口都是可以的,但是如果我们要在我们自己封装的Utils工具类中或者非controller普通类中使用@Resource或@Autowried注解注入Service或者Mapper接口就会出现注入为null的问题。下面解决方案:
方法1:使用静态变量 加 @PostConstruct 解决。
@Component //关键1
public class ArticlesReceiver {
@Resource
private WechatArticlesTempService wechatArticlesTempService;
public static ArticlesReceiver articlesReceiver; //关键2
@PostConstruct //关键3
public void init(){
articlesReceiver = this;
}
public WechatArticlesTemp getResposeArticlesBoby(String mediaId) {
WechatArticlesTemp articlesTemp = articlesReceiver.wechatArticlesTempService.getById(mediaId); //关键4
return articlesTemp ;
}
}
方法2:使用静态变量,加set注入
@Component //关键1
public class ArticlesReceiver {
private static WechatArticlesTempService wechatArticlesTempService; //关键2
@Autowired //关键3
public void setWechatArticlesTempService (WechatArticlesTempService wechatArticlesTempService){
ArticlesReceiver.wechatArticlesTempService = wechatArticlesTempService;
}
public WechatArticlesTemp getResposeArticlesBoby(String mediaId) {
WechatArticlesTemp articlesTemp = wechatArticlesTempService.getById(mediaId); //关键4
return articlesTemp ;
}
}
方法3:代码注入 , SpringContectHolder类将用到的类的class读入让后再调用类中方法
@Component //关键1
public class ArticlesReceiver {
private static WechatArticlesTempService wechatArticlesTempService = SpringContextHolder.getBean(WechatArticlesTempService.class); //关键2
public WechatArticlesTemp getResposeArticlesBoby(String mediaId) {
WechatArticlesTemp articlesTemp = wechatArticlesTempService.getById(mediaId); //关键3
return articlesTemp ;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具