@Autowired和@Resource注入报空指针--NullPointerException(亲测有效)

问题:ssm项目中,spring采用@Autowired或@Resource引入mapper,报空指针。

问题原因:在使用Spring进行自动注入的过程中,只会对通过读取Spring的配置文件或者配置类后产生的实例进行自动注入。
手动new出来的实例是无法获得在Spring中注册过得实例,这是 因为手动new 的实例并不是Spring 在初始化过程中注册的实例。

解决:读取Spring的配置文件,用@Autowired和@Resource来实现,不可用手动实例化 new来实现。
将启动类中引用消费者类的方法,将new 改为@Autowired

案例描述:启动类(InitMqOrderRecv )中引用到了消费者类(MQOrderOverTimeRecv )中的方法。消费者类中@Autowired引用了mapper层。启动类运行时,消费者类中的mapper层类报空指针异常。

代码

InitMqOrderRecv :启动类

@Component
public class InitMqOrderRecv {
    private static final Logger log= LoggerFactory.getLogger(InitMqOrderRecv.class);

    @PostConstruct
    public void initMqOrderRecv(){
    /**************问题所在***************/
    MQOrderOverTimeRecv ooto=new MQOrderOverTimerRecv();
        RabbitmqConfiguration rf= new RabbitmqConfiguration();
        try {
            rf.init();
            ooto.setRabConf(rf);
            ooto.init();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

MQOrderOverTimeRecv 消费者类:


@Component
public class MQOrderOverTimeRecv {
    private static final Logger log=LoggerFactory.getLogger(MQOrderOverTimeRecv.class);

    @Resource
    private ShopOrderMapper shopOrderMapper;

    @Resource
    private ShopGoodsSpecidMapper shopGoodsSpecidMapper;


    public void init() throws Exception{
    	shopGoodsSpecidMapper.updateInventoryById(specid);
    }

    public RabbitmqConfiguration getRabConf() {
        return rabConf;
    }
    
    public void setRabConf(RabbitmqConfiguration rabConf) {
        this.rabConf = rabConf;
    }
}

解决后的类引用

@Component
public class InitMqOrderRecv {
    private static final Logger log= LoggerFactory.getLogger(InitMqOrderRecv.class);
    /*****修改处******/
    @Autowired
    private MQOrderOverTimeRecv ooto;

    @PostConstruct
    public void initMqOrderRecv(){
        try {
            rf.init();
            ooto.setRabConf(rf);
            ooto.init();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

————————————————————上文出自胖胖,转载请附带原文链接

后续更新自学的方法,以及java知识总结
我是哪怕前路坎坷,也不愿负年轻的菜狗,学习之路,共勉

你可能感兴趣的:(java自学,java)