static类型autowired 注入失败

Posted zhouyeqin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了static类型autowired 注入失败相关的知识,希望对你有一定的参考价值。

原代码:注入commonService对象失败

  @Autowired
    private static CommonService commonService;public static List<Map<String, Object>> getCode(String codeType,  boolean allOption ,String orderType){
        return commonUtil.commonService.getCode(codeType, allOption, orderType);
    }
commonService在static状态下不能够被依赖注入,会抛出运行时异常java.lang.NullPointerException,为什么呢?
静态变量/类变量不是对象的属性,而是一个类的属性,spring则是基于对象层面上的依赖注入. 

解决方式1:

  @Autowired
    private CommonService commonService;
    private static CommonUtil commonUtil;
    
    @PostConstruct
    public void init() {
        commonUtil = this;
        commonUtil.commonService = this.commonService;
    }
    
    public static List<Map<String, Object>> getCode(String codeType,  boolean allOption ,String orderType){
        return commonUtil.commonService.getCode(codeType, allOption, orderType);
    }

 

以上是关于static类型autowired 注入失败的主要内容,如果未能解决你的问题,请参考以下文章

spring注入时bean的set方法为什么不能是static类型的?

Spring不能直接@autowired注入Static变量问题和解决方案

Spring不能直接@autowired注入Static变量问题和解决方案

依赖注入

@Autowired和static的关系

想用@Autowired注入static静态成员?官方不推荐你却还偏要这么做