啊 这。 2022-01-26 10:22 采纳率: 75%
浏览 171

静态类怎么使用@Autowired注入的类

我写了一个工具类然后需要操作数据库,就需要@autowired注入一下,按照网上的方法我写了以下代码

package com.cjbdi.core.extractcenter.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cjbdi.core.entity.NacosModel;
import com.cjbdi.core.mapper.ConfigInfoMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.yaml.snakeyaml.Yaml;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.List;

@Component
public class ConfigInfoUtils {
    private static Logger logger = LoggerFactory.getLogger(ConfigInfoUtils.class);

    @Autowired
    private ConfigInfoMapper configInfoMapper;

    public static ConfigInfoUtils configInfoUtils;


    @PostConstruct
    public void init(){
        configInfoUtils = this;
        configInfoUtils.configInfoMapper = this.configInfoMapper;
    }

    public JSONObject selectGroupAll(String group){
        List<NacosModel> byGroupAll = configInfoUtils.configInfoMapper.findByGroupAll(group);
        HashMap<String, Object> map = new HashMap<>();
        byGroupAll.stream().forEach(o ->{
            map.put(o.getDataId(),JSONObject.toJSONString(new Yaml().load(o.getContent())));
        });
        return JSONObject.parseObject(JSON.toJSONString(map));
    }

    public JSONObject selectDataId(String dataId, String group){
        String s = configInfoUtils.configInfoMapper.selectDataId(dataId, group);
        return new JSONObject(new Yaml().load(s));
    }
}

我调用是这么调用的

JSONObject caseOneJson = ConfigInfoUtils.configInfoUtils.selectGroupAll("extractor-feature-label").getJSONObject(caseOne);

然后报错
java.lang.NullPointerException
这些是错误

java.lang.NullPointerException
    at com.cjbdi.core.extractcenter.ExtractCasePortrait.<init>(ExtractCasePortrait.java:51)
    at com.cjbdi.core.controller.IntelJudgeController.<init>(IntelJudgeController.java:33)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:204)
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1312)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:895)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
    at com.cjbdi.core.ExtractFeatureApplication.main(ExtractFeatureApplication.java:25)

我想问一下这静态类要怎么用@autowired注入的类,我这上边的工具类或者调用方式有什么错误,请指教,急

  • 写回答

6条回答 默认 最新

  • Tomshidi 2022-01-26 10:40
    关注

    虽然自己引用自己在spring里是允许的,但是我不能理解你这么做的意义。
    静态类这么注入

    @Autowired
    public void setConfigInfoUtils(ConfigInfoUtils configInfoUtils){
        ConfigInfoUtils.configInfoUtils = configInfoUtils;
    }
    

    但是你这个空指针是这里报出来的哦
    ExtractCasePortrait.java:51

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 1月26日

悬赏问题

  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 找一个QT页面+目标识别(行人检测)的开源项目
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
  • ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错