【发布时间】:2021-01-06 15:45:12
【问题描述】:
我有以下控制器。
以下行可以正常工作:
user = userRepository.selectUserByLogin(name);
它正确地返回了用户。
@Controller
public class TestController {
@Autowired
private UserRepository userRepository;
@RequestMapping(method = RequestMethod.GET, value = "/testpage")
public String initTest() {
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String name = user.getUsername();
User user = new User();
user = userRepository.selectUserByLogin(name);
return "";
}
}
现在我想将该代码移至“实用程序”类的 getLoggedUser 方法。 我就是这样做的。
控制器
@Controller
public class TestController {
@RequestMapping(method = RequestMethod.GET, value = "/testpage")
public String initTest() {
Utilities utilities = new Utilities();
User user = new User();
user = utilities.getLoggedUser();
return "";
}
}
实用程序
public class Utilities {
@Autowired
private UserRepository userRepository;
public User getLoggedUser() {
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String name = user.getUsername();
User user = new User();
user = userRepository.selectUserByLogin(name);
return user;
}
}
但是当它被执行时,我得到了以下错误:
无法调用“UserRepository.selectUserByLogin(String)”,因为“this.userRepository”为空。
如果它使用@Autowired 表示法,为什么它为空? 看起来和原来的实现一样。
【问题讨论】:
标签: java spring spring-boot spring-mvc spring-data