У меня есть пружинный образец загрузки приложений с пакетом макета: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
Мой тест интеграции не удается запустить будучи не в состоянии найти ItemRepository боб , если поместить
@ComponentScan(basePackageClasses = { ItemService.class })
но работает, если я ставлю
@ComponentScan(basePackageClasses = { Application.class })
где я Это трюк?
спецификация говорит:
Либо basePackageClasses() или basePackages() (или его псевдоним() значение) может быть указано для определения конкретных пакетов для сканирования. Если конкретные пакеты не определены, сканирование будет происходить из пакета класса , который объявляет эту аннотацию.
@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 {
. . .
}
Но я действительно определяю конкретный пакет, поэтому задаюсь вопросом, почему бы пружину не распознать его. – magulla
Он работает, если вы определяете его как Приложение, которое находится в пакете более низкого уровня, но не если вы определяете его в пакете более высокого уровня , Пакет, который вы определяете как пакет 'parent', и он сканирует все пакеты' children'. –
Да, я знаю, что это работает с Приложением - это то, что указано в моем описании :). Моя точка зрения, согласно спецификации, должна работать даже с подпакетами. – magulla