在非controller、service里@Resource注入service為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 ;
    }
}

 參考 https://www.cnblogs.com/04241202-nan/p/11940610.html

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM