【问题标题】:Error creating bean in dependency injection with spring-boot使用spring-boot在依赖注入中创建bean时出错
【发布时间】:2019-05-23 15:48:35
【问题描述】:

这是我的代码 - https://github.com/iyngaran/to-do-list

我在 info.iyngaran.core.auth.repository 包中有 UserRepository 类,它带有 @Repository 注释。

当我尝试将其注入 info.iyngaran.core.auth.security 包中的 CustomUserDetailsService 类时,我收到以下错误。

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'customUserDetailsService': Unsatisfied dependency expressed through field 'userRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'info.iyngaran.core.auth.repository.UserRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

有人可以帮我找出这个问题吗?提前致谢。

【问题讨论】:

    标签: java spring spring-boot dependency-injection


    【解决方案1】:

    我通过将以下行添加到 Spring Boot 主类来解决此问题。

    @EnableJpaRepositories({"info.iyngaran.core","info.iyngaran.todolistapi"})
    

    这解决了我的问题。这是详细信息 - https://stackoverflow.com/a/53172477/9348637

    【讨论】:

      【解决方案2】:

      主要问题是组件扫描。所以按照以下方式安排你的代码

      TodolistApiApplication 类移动到包根 info.iyngaran

      清理杂物

      package info.iyngaran;
      
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      
      import javax.annotation.PostConstruct;
      import java.util.TimeZone;
      
      @SpringBootApplication
      public class TodolistApiApplication {
      
          @PostConstruct
          void init() {
              TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
          }
      
      
          public static void main(String[] args) {
              SpringApplication.run(TodolistApiApplication.class, args);
          }
      
      }
      

      还使用构造函数注入(对于修复不是必需的)。现场注入是非常糟糕的做法

      private final UserRepository userRepository;
      
      public CustomUserDetailsService(UserRepository userRepository) {
          this.userRepository = userRepository;
      }
      

      【讨论】:

      • 我没有发现组件扫描有任何问题。我在包中还有一些其他组件,例如 - LoggerConfig,它可以正常工作。
      • 你尝试了我的建议吗
      • 不,我想将这些类保存在单独的包中。
      • 你只需将一个类TodolistApiApplication移动到包根目录
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 2016-06-05
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      • 2017-04-25
      相关资源
      最近更新 更多