今天写项目的时候,发现一个很诡异的问题,在同一个controller中,增改查操作都是正常的,调用Service删除方法时,报空指针异常,往上找发现@Autowired注入的Service全部为null,上代码:
/**
* 删除表数据
* @param
* @return
*/
@DeleteMapping("/delete/{id}")
private String deleteTool(@PathVariable String id){
try{
astiService.deleteById(id);
}catch (Exception e){
e.printStackTrace();
throw new BusinessException("500","delete failed!");
}
}
查了一下资料,原因在这个方法是用private修饰的,无法匹配org.springframework.aop.support.AopUtils中的
Method[] methods = clazz.getMethods(); 所以无法被代理,从而导致注入失败。
解决方法:
- 将private更改为public
- 使用AspectJ来实现AOP的框架
附:
SpringAop与AspectJ的联系与区别
org.springframework.aop.support.AopUtils中关于修饰符部分的代码