У меня есть пример весеннего загрузочного приложения с макетом пакета:
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 {
. . .
}