2014-11-04 3 views
3

У меня есть пакет с именем com.example.service, а в моем классе конфигурации Spring у меня есть аннотация @ComponentScan({"com.example.service"},{"com.example.controller"}).Spring @ComponentScan for @Service

Когда я пытаюсь выполнить @Autowire, компиляция кода не выполняется с помощью NoSuchBeanDefinitionException. Интерфейс MyService аннотируется @Service.

В настоящее время я использую довольно уродливый обходной путь и объявить каждый компонент службы в моем ExampleConfig.java как

@Bean 
public MyService myService() { 
    return new MyServiceImpl(); 
} 

@ComponentScan Вообще, кажется, работает, если удалить пакет контроллера, диспетчеры не найдены. Что я понял неправильно? Пожалуйста, дайте мне знать, если я пропустил какую-либо соответствующую информацию.

+1

Исключение не происходит во время компиляции. Сохраняйте типы ошибок отдельно, или вы будете искать решения в неправильных местах. – chrylis

+0

Вы абсолютно правы. В этом пункте я был неточным с моим описанием. – dexBerlin

ответ

3

Интерфейс MyService помечается @Service

Вы должны аннотировать реализацию своего интерфейса. Не сам интерфейс.

0

Попробуйте использовать ниже код для ComponentScan аннотации для сканирования нескольких пакетов:

@ComponentScan({"com.example.service","com.example.controller"}) 

вместо

@ComponentScan({"com.example.service"},{"com.example.controller"}) 

@ComponentScan использует массив строк для сканирования нескольких базовых пакетов.

+0

Прошу прощения, но я думаю, вы не правильно прочитали вопрос. Это именно то, что я делаю. Но Йенс дал правильный ответ. – dexBerlin

Смежные вопросы