【问题标题】:org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of typeorg.springframework.beans.factory.NoSuchBeanDefinitionException:没有符合条件的 bean 类型
【发布时间】:2021-01-09 20:46:10
【问题描述】:

2020-09-23T15:28:00.3483912Z java.lang.IllegalStateException:无法加载 ApplicationContext 2020-09-23T15:28:00.3489821Z 原因:org.springframework.beans.factory.UnsatisfiedDependencyException:创建文件 [/home/runner/work/calculation-service/calculation-service/ 中定义的名称为“salecChannelEventProcessor”的 bean 时出错target/classes/com/demo/calculation/saleschannel/SalecChannelEventProcessor.class]:通过构造函数参数1表示的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有可用的“de.demo.json.schema.JsonValidator”类型的合格 bean:预计至少有 1 个有资格作为自动装配候选者的 bean。依赖注解:

import de.demo.json.schema.JsonValidator;
@Configuration
@ComponentScan( basePackages = {
        "com.demo",
        "de.demo" },
        excludeFilters = {
                @ComponentScan.Filter( Configuration.class )
        } )
@ImportResource("classpath:/spring-context.xml")
@Import({SwaggerConfig.class, SalesChannelSqsConfig.class})
public class SpringMvcConfig extends WebMvcConfigurationSupport {
 @Autowired private ApplicationContext applicationContext;

@Bean( name = "objectMapper" )
    public ObjectMapper getObjectMapper( JacksonService jacksonService ) {
        return jacksonService.getObjectMapper();
    }

@Bean(name = "jsonValidator")
    public JsonValidator jsonValidator() {
        return new JsonValidator();
    }
}

@Component
@Slf4j
@RequiredArgsConstructor
public class SalesChannelUpdateListerner {

  @NonNull
  private final SalesChannelService salesChannelService;

  @NonNull
  private final SalecChannelEventProcessor salecChannelEventProcessor;

  @SqsListener(value = "${sales.channel.update.queue.name}", deletionPolicy = ON_SUCCESS)
  @SneakyThrows
  public void receiveSalesChannelUpdateEvent(
      @NotificationMessage EnvelopedMessage envelopedMessage) {
    log.debug("Received message from sales channel update event queue : {}"
}


@Component
@Slf4j
@RequiredArgsConstructor
public class SalecChannelEventProcessor {

  private static final String MESSAGE_TYPE = "sales_channel_update";

  @NonNull
  private final ObjectMapper objectMapper;
  @NonNull 
  private final JsonValidator jsonValidator;



  @SneakyThrows(JsonProcessingException.class)
  public boolean isValid(EnvelopedMessage envelopedMessage) {
    if (!MESSAGE_TYPE.equals(envelopedMessage.getType())) {
      return false;
    }
    return jsonValidator.validate(envelopedMessage);
  }

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    您需要创建JsonValidator bean。您需要将您的 SalecChannelEventProcessor 更改为:

    @Component
    @Slf4j
    @RequiredArgsConstructor
    public class SalecChannelEventProcessor {
    
      private static final String MESSAGE_TYPE = "sales_channel_update";
    
      @NonNull
      private final ObjectMapper objectMapper;
    
      @Bean
      public JsonValidator  jsonValidator(){
           return new JsonValidator();
      }
    
      @SneakyThrows(JsonProcessingException.class)
      public boolean isValid(EnvelopedMessage envelopedMessage) {
          if (!MESSAGE_TYPE.equals(envelopedMessage.getType())) {
              return false;
          }
          return jsonValidator().validate(envelopedMessage);
      }
    }
    

    【讨论】:

    • 但是我在SpringMvcConfig.java中定义了JsonValidator
    • 注入的不是 Bean。你试图注入de.demo.json.schema.JsonValidator。如果您已经在配置中定义了一个 JsonValidator bean,请确保它与在 SalecChannelEventProcessor 类中导入的相同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    相关资源
    最近更新 更多