在非Controller中 使用 @Autowired 或 @Resource注解变量 为null问题,3种解决方法

方法一:

  使用静态变量 加 @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 ;
	}
}    

 

方法二:

  使用静态变量,加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 ;
	}
} 

方法三:

  代码注入 , 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 ;
	}
} 

  

 

猜你喜欢

转载自www.cnblogs.com/huangziwu/p/9450377.html