3

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

ответ

1

Javadoc говорит:

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

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

+0

Но я действительно определяю конкретный пакет, поэтому задаюсь вопросом, почему бы пружину не распознать его. – magulla

+0

Он работает, если вы определяете его как Приложение, которое находится в пакете более низкого уровня, но не если вы определяете его в пакете более высокого уровня , Пакет, который вы определяете как пакет 'parent', и он сканирует все пакеты' children'. –

+0

Да, я знаю, что это работает с Приложением - это то, что указано в моем описании :). Моя точка зрения, согласно спецификации, должна работать даже с подпакетами. – magulla