我們在項目中,一般在controller層中注入service接口,在service層中注入其它的service接口或者mapper接口都是可以的,但是如果我們要在我們自己封裝的Utils工具類中或者非controller普通類中使用@Resource或@Autowried注解注入Service或者Mapper接口就會出現注入為null的問題。下面解決方案:
方法1:使用靜态變量 加 @PostConstruct 解決。
1 @Component //關鍵1
2 public class ArticlesReceiver {
3
4 @Resource
5 private WechatArticlesTempService wechatArticlesTempService;
6
7 public static ArticlesReceiver articlesReceiver; //關鍵2
8
9 @PostConstruct //關鍵3
10 public void init(){
11 articlesReceiver = this;
12 }
13
14 public WechatArticlesTemp getResposeArticlesBoby(String mediaId) {
15 WechatArticlesTemp articlesTemp = articlesReceiver.wechatArticlesTempService.getById(mediaId); //關鍵4
16 return articlesTemp ;
17 }
18 }
方法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 ;
}
}
參考:https://www.cnblogs.com/huangziwu/p/9450377.html