Java 空存储库,即使已实现@Autowired
我有以下控制器 下面这一行很好: user=userRepository。选择userbylogin(名称) 它正确地返回用户Java 空存储库,即使已实现@Autowired,java,spring,spring-boot,spring-mvc,spring-data,Java,Spring,Spring Boot,Spring Mvc,Spring Data,我有以下控制器 下面这一行很好: user=userRepository。选择userbylogin(名称) 它正确地返回用户 @Controller public class TestController { @Autowired private UserRepository userRepository; @RequestMapping(method = RequestMethod.GET, value = "/testpage") p
@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 "";
}
}
现在我想把代码移到“Utilities”类的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表示法,为什么为空?
看起来与原来的有效实现中的相同。如果您使用以下新选项创建
实用程序类的实例,则Spring将无法自动连接存储库:
Utilities=newutilities()代码>
为此,您必须将@组件
或@服务
注释添加到实用程序
类中:
@组件
公用事业{
然后将其自动连接到控制器中:
@控制器
公共类测试控制器{
@自动连线
私人公用事业;
@RequestMapping(method=RequestMethod.GET,value=“/testpage”)
公共字符串initTest(){
用户=新用户();
user=utilities.getLoggedUser();
返回“”;
}
}
如果您使用新的类创建实用程序的实例,Spring将无法自动连接存储库,例如:
Utilities=newutilities();
为此,您必须将@组件
或@服务
注释添加到实用程序
类中:
@组件
公用事业{
然后将其自动连接到控制器中:
@控制器
公共类测试控制器{
@自动连线
私人公用事业;
@RequestMapping(method=RequestMethod.GET,value=“/testpage”)
公共字符串initTest(){
用户=新用户();
user=utilities.getLoggedUser();
返回“”;
}
}