springboot项目中注入bean后,调用时报n

需求:

在socket接收到上报数据后,在handler中调用工具类中ProtocolAnalyse的conAnalyse(byte[] data, int dataLen)解析数据。解析数据后,将解析后的结果保存至数据库。注入了三个bean:

    @Autowired
    private PersonTeService personTeService;

    @Autowired
    private TargetTeService targetTeService;

    @Autowired
    private EnvTeService envTeService;

这三个bean完成对数据库的增、删、改、查。

但是总是报空指针异常如下:

springboot项目中注入bean后,调用时报n_第1张图片

 经过排查,代码141行内容如下:

List person = personTeService.getPersonTe(map);

代码本身没有任何问题,因为在springboot提供的test工具类中都能正常运行,最后,定位到是因为在handler中使用ProtocolAnalyse工具类时,是通过new该对象的一个实例,spring IOC容器是没有去看管他的,所以并不在同一个上下文中,那么new出来的这个类里面的实例方法,当然也调用不到spring IOC上下文里的实例了,所以当你调用你new出来的实例的方法时候,该方法里调用的spring的bean,都是没有注入的对象的。

最后通过使用SpringContextUtil.getBean("ProtocolAnalyse")工具类实例化该实力后,问题解决。

ProtocolAnalyse protocolAnalyse = (ProtocolAnalyse)SpringContextUtil.getBean("ProtocolAnalyse");
protocolAnalyse.conAnalyse(rInfo,rInfo.length);

你可能感兴趣的:(spring,boot,后端,java)