需求:
在socket接收到上报数据后,在handler中调用工具类中ProtocolAnalyse的conAnalyse(byte[] data, int dataLen)解析数据。解析数据后,将解析后的结果保存至数据库。注入了三个bean:
@Autowired
private PersonTeService personTeService;
@Autowired
private TargetTeService targetTeService;
@Autowired
private EnvTeService envTeService;
这三个bean完成对数据库的增、删、改、查。
但是总是报空指针异常如下:
经过排查,代码141行内容如下:
List<PersonTe> 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);