Как я могу зарегистрировать автоматически реализованное хранилище, расположенное в зависимости, как bean-компонент? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть модуль A с зависимостью от проекта модуля B:

A build.gradle

dependencies {
  ....
  compile project(":B")
}

В модуле B, у меня есть этот интерфейс:

@Repository
public interface MyRepo extends CrudRepository<User, String> {
    //some methods
} 

В модуле A у меня есть этот класс конфигурации:

@Configuration
public class MyConfig {    

  @Bean
  public MyRepo provideMyRepo() {
      //???
  }

}

Как экспортировать бин MyRepo в модуль A?

Я пытался использовать @ComponentScan и @EnableJpaRepositories:

@Configuration
@EnableJpaRepositories(basePackageClasses = MyRepo.class)
public class MyConfig {    

  @Autowired
  public MyRepo myRepo;

}

Но боб не может быть найден:

org.springframework.beans.factory.NoSuchBeanDefinitionException: Нет боб квалификации найден для зависимости

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Вы можете либо @EnableJpaRepositories пакет, в котором содержится MyRepo.

Или добавьте конфигурацию в Модуль B, которая будет сканировать необходимые пакеты для репозитория и использовать Import, чтобы перетащить Configuration в A.

Если это проект Spring Boot, у вас есть дополнительные функции автоконфигурации, https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html

Наконец, если хранилище уже зарегистрировано, вы можете просто использовать его как обычно.

0 голосов
/ 30 октября 2018

Вам не нужна новая конфигурация для этого репозитория, поскольку он уже зарегистрирован в Spring. Вы можете просто внедрить его прямо в классы клиента в модуле A:

@Component
public class MyComponent {    
  @Inject
  private MyRepo myRepo;

  // your code using myRepo

}

Если Spring сообщает, что не может найти bean-компонент, необходимо проверить имеющуюся конфигурацию автоматического подключения, поэтому убедитесь, что путь сканирования содержит класс репозитория в B (измените его с помощью @ComponentScan или)

См. этот пример

...