java - Autowired Service 在特定方法中为空
问题描述
我有一个 Spring Boot 应用程序,突然间,自动装配的服务在特定方法返回 null。
这是控制器的代码片段:
@RestController
@RequestMapping("/user")
@CrossOrigin
public class UserManagementController {
@Autowired
private UserService userService;
...
@PostMapping("/register")
private GameInfo register(@RequestBody UserInfo userInfo) {
User user = new User();
...
user.setUsername("user-" + userService.count());
...
return gameController.getGameInfo(user);
}
...
@PostMapping("/statistics")
public StatisticsInfo statistics(
@RequestParam(name = "username", required = true) String username,
Authentication authentication) {
User user = userService.findByUsername(username);
...
}
}
在第userService
一种方法中为 null,在第二种方法中工作正常。
更新: 这是 UserService 的代码片段,它在“注册”方法中为空。
@Service
public class UserService implements UserDetailsService {
@Autowired
private UserRepository repository;
public long count() {
return repository.count();
}
...
}
具有正常的userService
CRUD 方法。请注意,userService 为 null,因此当我调用它的任何方法时都会引发 NullPointerException。
更新 2:
我创建了错误方法的克隆register
并将其命名dontRegister
,这神奇地解决了问题,register
但在新方法中引入了相同的问题。
我不明白这背后的逻辑,因为我似乎总是需要添加一个额外的未使用的方法。
在有人提出解释之前,我会一直保持这个问题。
解决方案
你的注册方法是private
,make it public
。从逻辑上讲,它应该是公共的,因为它是从包外部调用的。
推荐阅读
- python - Python:从文件 csv 加载数据在 .db 中插入整个数据并对表进行操作
- macos - OSX Wine 程序无法识别 USB 设备
- r - 如何在 R 中使用 read.delim 读取包含交叉开关的列名
- python - 当我没有它的 id 时,如何使用 Selenium 与元素交互?
- reactjs - 当使用 create-react-app 启动 yarn start 时,服务器的文档根在哪里?
- sql - 如何正确使用光标
- node.js - Dialogflow 中的默认参数
- python - 重新评估/更新作为 Python 中的类变量传递的条件表达式的真值的最佳方法
- java - 对令牌感到困惑
- javascript - Laravel图像点击覆盖javascript