踩了大坑,特意来记一笔
由于自己的项目需要,使用aop来做操作日志的记录,先看一下我出问题的代码吧
@RestController
@Api(tags = "用户操作API")
@RequestMapping(value = "/sys/user", produces = MediaType.APPLICATION_JSON_VALUE)
public class UserController {
@Autowired
private UserService userService;
/*对用户得所有操作都以user info id为主,及用户id为info id*/
@ControllerLogSave(operations = "添加用户")
@ApiOperation("添加用户")
@PostMapping("/add")
private ResponseDto<Object> addUser(@Valid UserDto user) throws InitiativeException {
userService.addUser(user);
return ResponseDto.newOkResponseDto();
}
}
这只是部分代码,在我添加了Aop之后,除了这一个控制器出问题以外,其他控制器都是正常的,就是这个控制器的接口在访问时会报null指针异常,原因是注入的userService注入失败了,为null,当时我就纳闷了,如果是我的aop有问题的话不应该只有这个有问题啊,疯狂打断点找问题所在,只在于小生能力有限,通过断点并未找到问题所在,最后才知道:aop只能适用于 protect 和public 修饰符修饰的方法。
https://blog.csdn.net/wangh92/article/details/79581129
只要把private改为public就可以了,我平时的编写习惯在controller层的所有接口方法都是public修饰的,结果这一个控制器里面的接口方法全是private修饰,我也不知道是不是我当时秀逗了,不过也因祸得福,加强了下切面的知识了。