NoSuchBeanDefinitionException для глубокого наследования - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть загрузочное приложение Spring.Мой репозиторий написан следующим образом:

Интерфейс:

@NoRepositoryBean
public interface MyQueryRepository {

    int checkThis(String this);

    int checkThisAndThat(String this, String that);

}

Абстрактный класс:

public abstract class AbstractMyQueryRepository implements MyQueryRepository {

        @Override
        public int checkThis(String this) {...}

        @Override
        public int checkThisAndThat(String this, String that) {...}

}

затем реализация:

@Transactional(TVServiceDbConfigAtlanta.TV_TRANSACTION_MANAGER_NAME_ATLANTA)
@Repository
public class MyQueryRepositoryAtlanta extends AbstractMyQueryRepository {

  @Autowired
  public MyQueryRepositoryAtlanta (
          @Qualifier(TVServiceDbConfigAtlanta.TV_DATA_SOURCE_BEAN_NAME_ATLANTA) final DataSource dataSource) {
    super(dataSource);
  }
}

Когда я пытаюсь автоматически подключить MyQueryRepositoryAtlanta в моем UT следующим образом:

@ExtendWith(SpringExtension.class)
@DataJpaTest
@ActiveProfiles("test")
class MyQueryRepositoryAtlantaTest{


    @Autowired
    private MyQueryRepositoryAtlanta myQueryRepositoryAtlanta ;

    @Test
    void checkThisTest() {
        assertThat(myQueryRepositoryAtlanta.checkThis("ABC")).isEqualTo(1);
    }


    @TestConfiguration
    @Profile("test")
    @Import(TVServiceDbConfigAtlanta.class)
    public static class Config {

    }
}

я получаю следующую ошибку:

org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания бина с именем 'com.myapp.MyQueryRepositoryAtlantaTest': Неудовлетворенная зависимость, выраженная через поле 'myQueryRepositoryAtlanta';Вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступного квалифицирующего компонента типа com.myapp.Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательный = true)} в org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (Autowiredevan [-5.0.8.RELEASE.jar: 5.0.8.RELEASE] в org.springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.java:91) ~ [spring-beans-5.0.8.RELEASE.jar:5.0.8.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues ​​(AutowiredAnnotationBeanPostProcessor.java:372) ~ [spring-beans-5.0.8.RELEASE.REL.jar: 5.0:springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1341) ~ [spring-beans-5.0.8.RELEASE.jar: 5.0.8.Relan.Beaf.autowireBeanProperties (AbstractAutowireCapableBeanFactory.java:393) ~ [spring-beans-5.0.8..jar: 5.0.8.RELEASE] [...]

Я не уверен, что понимаю почему, поскольку:

  • Аннотируемый компонент, который я тестирую, аннотированкак @Repository и
  • Нет другого компонента, вызываемого таким же образом

Я также проверил похожие ответы в SOF, но они неприменимы из-за конкретной структуры, которую я использую.Есть идеи о том, как решить проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...