Весенний контекст, похоже, не распознает компонент при его создании с помощью аннотаций стереотипов. Вызывает исключение NoSuchBeanDefinitionException

#spring #spring-bean #spring-context

Вопрос:

Я следую книге, чтобы изучить некоторые модули экосистемы Spring. В настоящее время пытаюсь создать компоненты с использованием аннотаций стереотипов. Я написал простой класс Java и пометил его как компонент:

 package main.parrot;
@Component
public class Parrot {
  private String name;
  // getters and setters //
}
 

Затем я создал класс @Configuration, который сканирует компонент Parrot:

 package main;
//imports
@Configuration
@ComponentScan(basePackages = "parrot")
public class ProjectConfig{}
 

В своем основном методе я создаю контекст spring, используя приведенную выше конфигурацию, и пытаюсь получить доступ к бобовому попугаю:

 package main;
//imports//
public class Main{
  public static void main(String...args){
    var context = new AnnotationConfigApplicationContext(ProjectConfig.class);
    var p = context.getBean(Parrot.class);
  }
}
 

Строка кода, в которой я пытаюсь получить боб Попугая, выдает следующее исключение:
Исключение NoSuchBeanDefinitionException: Нет квалифицирующего компонента типа ‘main.parrot.Попугай» доступен

Я просто не понимаю, почему эта конфигурация не нашла бы боба Попугая. Если бы кто-нибудь мог помочь мне прояснить этот вопрос, я был бы чрезвычайно признателен.

Заранее спасибо

Ответ №1:

Вам необходимо изменить basePackages , чтобы включить полное имя пакета:

 package main;
//imports
@Configuration
@ComponentScan(basePackages = "main.parrot")
public class ProjectConfig{}
 

Комментарии:

1. Понятно, большое вам спасибо. Я пробовал это сделать, но если я это сделаю, то получу огромную ошибку. Похоже, это просто потому, что файлы классов не поддерживаются версией spring, которую я использую, поэтому я могу легко это исправить. Еще раз спасибо!