不受spring容器管理

比如在接口中使用了new的方式,则里面用到的东西都不会被spring容器管理

代码

@Resource private FactoryMonitorService factoryMonitorService; private final RestTemplateHelper restTemplateHelper; @PostMapping("/test") public List<MachineMergedVo> test() { final FactoryMonitorService factoryMonitorService = new FactoryMonitorService(); final List<MachineMergedVo> p1LAOI01 = factoryMonitorService.machineDetail("P1LAOI01"); return p1LAOI01; }

此时的emapMachineService是为null的,并没有被注入进来

@Autowired private EmapMachineServiceImpl emapMachineService; /** * 机台详情 */ public List<MachineMergedVo> machineDetail(String machineId) { List<EmapMachine> machineDetailList = emapMachineService.getMachineDetail(machineId); final List<MachineMergedVo> machineMergedVos = mergeMachineList(machineDetailList); return machineMergedVos; }

问题分析

问题分析:

  • 第 ① 行通过@Resource注入的factoryMonitorService是 Spring 容器创建并装配好的对象,其内部的emapMachineService已经被自动注入。
  • 第 ② 行你重新定义了一个同名的局部变量,并用new创建了一个全新的FactoryMonitorService实例。这个对象是纯粹的 Java 对象,Spring 对它一无所知,因此它内部的emapMachineService字段保留为null,调用时自然就出现NullPointerException