Spring Boot中无法通过构造函数注入Repository问题求助
问题解决:构造函数注入后Repository为null的问题
问题原因
你当前的代码里同时存在无参构造函数和带参构造函数,Spring在创建UserJpaResource的Bean实例时,会默认选择无参构造来初始化对象,导致userRepository和postRepository都没有被赋值,调用findAll()时自然抛出空指针异常。
解决方法(无需@Autowired)
直接删除无参构造函数即可。Spring 4.3及以上版本会自动识别类中唯一的构造函数,并自动完成依赖注入,不需要额外加@Autowired注解。
修改后的UserJpaResource.java代码:
@RestController public class UserJpaResource { private UserRepository userRepository; private PostRepository postRepository; // 只保留带参构造,删除无参构造 public UserJpaResource(UserRepository userRepository, PostRepository postRepository) { this.userRepository = userRepository; this.postRepository = postRepository; } @GetMapping("/jpa/users") public List<User> retrieveAllUsers() { return userRepository.findAll(); } }
补充说明
如果你的Spring版本低于4.3,或者出于某些原因必须保留无参构造,那只能在带参构造上添加@Autowired注解(但这不符合你不想用@Autowired的需求,所以优先推荐上面的方法)。
内容的提问来源于stack exchange,提问作者Quốc Kiệt
相关产品推荐
相关产品推荐

