【问题标题】:Null repository even with @Autowired implemented即使实现了@Autowired,也为空存储库
【发布时间】: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


    【解决方案1】:

    如果您使用以下新创建 Utilities 类的实例,Spring 将无法自动装配您的存储库: Utilities utilities = new Utilities();

    为此,您必须在 Utilities 类中添加 @Component@Service 注释:

    @Component
    public class Utilities {
    

    然后将其自动连接到您的控制器中:

    @Controller
    public class TestController {
    
        @Autowired
        private Utilities utilities;
    
        @RequestMapping(method = RequestMethod.GET, value = "/testpage")
        public String initTest() {
            User user = new User();
            user = utilities.getLoggedUser();
    
            return "";
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-21
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      相关资源
      最近更新 更多