【问题标题】:SpringBoot - UnsatisfiedDependencyException Spring Boot not Autowiring Repository interface which extends CrudRepositorySpringBoot - UnsatisfiedDependencyException Spring Boot 不自动装配存储库接口,它扩展了 CrudRepository
【发布时间】:2019-01-26 05:00:07
【问题描述】:

Spring Boot 应用程序在启动服务器时抛出异常。
例外是:

上下文初始化期间遇到异常 - 取消 刷新尝试: org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“userController”的 bean 时出错:不满足的依赖关系 通过字段“userService”表示;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“userService”的 bean 时出错:不满足的依赖关系 通过字段“userRepository”表示;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 符合条件的 bean 类型 'yhcmain.healthcare.repositories.UserRepository' 可用:预期 至少 1 个符合自动装配候选资格的 bean。依赖 注释: {@org.springframework.beans.factory.annotation.Autowired(required=true)}



应用程序启动失败


说明:

yhcmain.healthcare.service.user.UserServiceImpl 中的字段 userRepository 需要一个找不到类型为“yhcmain.healthcare.repositories.UserRepository”的 bean。

行动:

考虑在你的配置中定义一个“yhcmain.healthcare.repositories.UserRepository”类型的bean

控制器:

@RestController
@CrossOrigin("*")
public class UserController {

    @Autowired
    private ServiceResponse response;

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/index", method = RequestMethod.POST, headers = "Accept=application/json")
    public ResponseEntity<ServiceResponse> signUpAttempt(@RequestBody User user) {
        ...
        ...
    }
}

服务:

@Service("userService")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    public User createUser(User user) {
        return this.userRepository.save(user);
    }
}

存储库:

@Repository("userRepository")
public interface UserRepository extends CrudRepository<User, String> {
}

主要应用:

@SpringBootApplication
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class HealthcareApplication implements WebMvcConfigurer {

    public static void main(String[] args) {
        SpringApplication.run(HealthcareApplication.class, args);
    }

    @Override
    public void addCorsMappings(CorsRegistry registry) {
    ...
    ...
    }
}

【问题讨论】:

  • 组件扫描中是否添加了yhcmain.healthcare.repositories包?
  • 在自动装配 userRepository 时尝试 @Qualifier("userRepository") 投入使用(同时保留 @Autowired@Qualifier....
  • @FarazDurrani 我试过了,它不起作用。
  • @GarimaGupta 你成就了我的一天。我的印象是spring boot会自动扫描根目录下的所有子目录。添加 @ComponentScan(basePackages = "human.healthcare.repositories") 消除了错误。
  • @GarimaGupta 现在服务器正在运行,但服务器每次都响应 404 错误,因为我已将 componentScan 添加到 Repository 包,该包现在已成为基本包,Spring 现在正在搜索所有其他文件存储库包。

标签: java spring-mvc spring-boot


【解决方案1】:

您需要在存储库定义的CrudRepository 接口中提供实体的primary key(ID 为Long 或Integer),并确保@ComponentScan("RootDirectoryURL") 工作正常。

...

@Repository("userRepository")
public interface UserRepository extends CrudRepository<User, PrimaryKey> {}

...

编码愉快.. :)

【讨论】:

    【解决方案2】:

    您需要在您的配置类(HealthcareApplication)中添加以下注解:

    @EnableJpaRepositories("<repository-package>")
    

    【讨论】:

      猜你喜欢
      • 2017-05-23
      • 2014-06-24
      • 2017-03-28
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 2016-07-31
      • 1970-01-01
      相关资源
      最近更新 更多