Автоматическая проблема с бобом - PullRequest
0 голосов
/ 19 июля 2011

с пружиной 2.5,

у меня есть класс StockDwr

StockDwr Это акция с именем бина, у которой в этом классе есть область действия прототипа

, у меня есть атрибут ModRepositoryс аннотацией @Autowired

ModRepository используется только этим классом

в этом классе у меня есть только это (потому что я пытаюсь найти проблему)

public void read(String fileName) {
    System.out.println(fileName);
}

, когда яперейдите к jsp, использующему stock, я получаю

Ошибка при создании bean-компонента с именем stock: сбой автоматического подключения полей;вложенное исключение: org.springframework.beans.factory.BeanCreationException: не удалось автоматически связать поле: private com.domain.ModRepository com.web.StockDwr.modRepository;вложенное исключение: org.springframework.beans.factory.NoSuchBeanDefinitionException: не определен уникальный bean-компонент типа [com.domain.ModRepository]: неудовлетворенная зависимость типа [com.domain.ModRepository]: ожидается как минимум 1 соответствующий бин

Я не определил ModRepository в XML-файле, я пытался это сделать, но у меня возникла та же проблема

Есть идеи?

Ответы [ 4 ]

2 голосов
/ 19 июля 2011

Возможно, вы ввели неверное определение компонента для ModRepository в файле xml. Spring не может найти bean-компонент com.domain.ModRepository

Автопроводка происходит по типу. Является ли ваша ModRepository реализация какого-то интерфейса? В том случае, если существует много реализаций, пружина не сможет однозначно идентифицировать компонент.

Чтобы избежать этого, используйте аннотацию @Qualifier. Классификатор обеспечивает автоматическое подключение по имени.

В качестве альтернативы вы можете попробовать с аннотацией, поместить @Component поверх класса ModRepository и убедитесь, что у вас есть эти две строки в вашем applicationContext.xml

  <context:annotation-config />
  <context:component-scan base-package="com.domain" />
2 голосов
/ 19 июля 2011

Вы получаете ошибку, потому что Spring не знает вашего объекта ModRepository.Чтобы что-то связать, весна должна знать, что это такое.Вы говорите, что пытались определить ModRepository в контексте приложения xml, но все равно получаете ту же ошибку.В этом случае вы должны были определить его неправильно, потому что это именно то, что вы должны сделать.

1 голос
/ 19 июля 2011

Я предполагаю, что вы настроили

   <context:component-scan base-package="..."/>. 

Без аннотации @Component у Spring нет возможности узнать, какой класс является компонентом, который он должен отслеживать.

0 голосов
/ 30 августа 2016

@ Автосвязь с использованием аннотаций

@ Открытый класс Repository ("ExampleDao") ExampleDaoImpl реализует открытый класс ExampleDao

@ Service ("ServiceExample") ExampleServiceImpl реализует ExampleService

@Открытый класс контроллера ExampleController

@ Autowired private ExmpleService ServiceExample;

...