Аннотация Spring @ComponentScan не работает

У меня есть пример весеннего загрузочного приложения с макетом пакета:

main:
-com.foo
     Application.java       
-com.foo.services
      ItemService.java
      ItemRepository.java    
-com.foo.config
     Configuration.java
test:
-com.foo.services 
     ItemServiceIngegrationTest.java

Мой интеграционный тест не запускается из-за невозможности найти bean-компонент ItemRepository, если поставить

  @ComponentScan(basePackageClasses = { ItemService.class })

но работает, если я поставлю

  @ComponentScan(basePackageClasses = { Application.class })

в чем фокус?

спецификация говорит:

Для определения конкретных пакетов для сканирования можно указать basePackageClasses () или basePackages () (или его псевдоним value ()). Если конкретные пакеты не определены, сканирование будет происходить из пакета класса, который объявляет эту аннотацию.

@EnableAutoConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { Configuration.class })
public class ItemServiceIntegrationTest { 
    . . .
}

@org.springframework.context.annotation.Configuration
@PropertySource("classpath:application.properties")
@ComponentScan(basePackageClasses = { ItemService.class })
public class Configuration extends AbstractMongoConfiguration {
   .  .  .
}   

person magulla    schedule 21.02.2016    source источник


Ответы (1)


В javadoc говорится:

Если конкретные пакеты не определены, сканирование будет выполняться из пакета класса, который объявляет эту аннотацию.

Таким образом, он сканирует из пакета, который объявляет ComponentScan, если не определен конкретный класс пакета. Можете ли вы поместить его в Application класс?

person K.Nicholas    schedule 21.02.2016
comment
Он работает, если вы определяете его как приложение, которое находится в пакете более низкого уровня, но не, если вы определяете его в пакете более высокого уровня. Пакет, который вы определяете как parent пакет, сканирует все children пакеты. - person K.Nicholas; 21.02.2016
comment
да, я знаю, что это работает с приложением - это то, что указано в моем описании :). Я считаю, что согласно спецификации он должен работать даже с подпакетами. - person magulla; 23.02.2016
comment
Да, согласен. Согласно документации, кажется, что обе ваши аннотации должны найти bean-компонент ItemRepository. - person K.Nicholas; 23.02.2016