【问题标题】:Getting error - No qualifying bean of type出现错误 - 没有符合条件的 bean 类型
【发布时间】:2019-08-16 10:17:01
【问题描述】:

我有一个名为IJobService的接口

@Service
public interface IJobService {
    List<SearchTupleModel> getTuplesFromJobService(List<String> jobIds);
}

我有一个类 JobService 实现这个:

@Service
public class JobService implements IJobService {
}

在控制器中,我只是将此接口自动装配为:

public class JobSearchResource {
    @Autowired
    IJobService iJobService;
}

但我得到了错误:

没有符合条件的 bean 类型 e 可用: 预计至少有 1 个 bean 符合自动装配候选资格。

【问题讨论】:

  • 你的 Spring 上下文是如何通过 xml 或注解初始化的?确保可以通过包扫描访问JobService
  • 纯注解,没有XML
  • 你需要使用@Config类来定义
  • 从 IJobService 中移除 @Service 注释。您只需要对实现进行注释
  • 为 JobSearchresource 添加 @Controller

标签: java spring spring-boot


【解决方案1】:

从接口 IJobService 中删除 @Service 注释。

public interface JobService {
    List<SearchTupleModel> getTuplesFromJobService(List<String> jobIds);
}


@Service
public class JobServiceImpl implements JobService {
}

并将@Controller 添加到您的控制器

@Controller
public class JobSearchResource {
   @Autowired
   JobService jobService;
}

【讨论】:

    【解决方案2】:

    您的项目 Application.java(或其他名称)文件包含 main 方法应位于根目录中,如给定参考中所示:

    Application.java 文件应该包含注释 @SpringBootApplication,如果它们被 @Service 注释,它将自动扫描所有文件并为它们创建 bean @Controller@Configuration等...

    否则,如果您想将 Application.java 文件保留在其他包中,则必须在组件扫描注释中明确提及根目录,如下所示:

    @SpringBootApplication
    @ComponentScan(basePackages = {"com.starterkit.springboot.brs"})
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    

    【讨论】:

      【解决方案3】:

      预计至少有 1 个 bean 有资格作为自动装配候选者。

      这个类配置一个spring bean

      @Configuration
      public class IJobServiceConfig {
         @Bean 
         public IJobService iJobService (){
             return new IJobService ();
         }
      }
      

      还为控制器类添加@Controller

      【讨论】:

        【解决方案4】:

        你应该从接口中移除@Service注解,如果它的控制器也使用@Component或@Controller定义你的JobSearchResource bean。

        【讨论】:

          【解决方案5】:

          你可以删除接口 IJobService 上方的 @Service 吗?

          @Service 表示下面的代码是注入的候选代码。

          由于 IJobService 和 JobService 都有 @Service,它会产生 2 个选择,所以 spring 不知道该使用哪一个。

          【讨论】:

          • 如果创建了 2 个 bean,则异常文本是另一个,例如 found 2 candidates: ....
          • @AlexSalauyou 我同意。接口不被实例化。对不起。然而,有必要消除歧义。
          猜你喜欢
          • 1970-01-01
          • 2021-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多