Включение имени бина предотвращает создание - PullRequest
0 голосов
/ 25 мая 2018

У меня есть класс конфигурации (см. Ниже), который создает Retrofit «bean-компоненты», и эти bean-компоненты затем (должны быть) внедрены в сервис.Тем не менее, в данный момент кажется, что bean-компонент Retrofit «exampleRepository» не был создан до службы , когда указано имя bean-компонента , т.е. «@Bean (name = exampleRepository)».Я использовал эту настройку множество раз без проблем, но здесь это не сработало.Кто-нибудь знает почему?Код следует.

Конфигурация

@Configuration
@ConfigurationProperties("example")
public class RetrofitConfig {

  @NotNull
  private String baseUrl;

  public String getBaseUrl() {
    return baseUrl;
  }

  public void setBaseUrl(String baseUrl) {
    this.baseUrl = baseUrl;
  }

  @Bean(name = "retrofitBuilder")
  public Retrofit.Builder retrofitBuilder() {    
    return new Retrofit.Builder().addConverterFactory(JacksonConverterFactory.create());
  }

  @Bean(name = "okHttpClient")
  public OkHttpClient okHttpClient() {
    HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
    httpLoggingInterceptor.setLevel(Level.BODY);
    OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
    httpClient.addInterceptor(httpLoggingInterceptor);
    return httpClient.build();
  }

  @Bean(name = "exampleRetrofit")
  public Retrofit exampleRetrofit(@Qualifier("retrofitBuilder") Retrofit.Builder builder, @Qualifier("okHttpClient") OkHttpClient okHttpClient) {    
    return builder.client(okHttpClient).baseUrl(getBaseUrl()).build();
  }

  @Bean(name = "exampleRepository")
  public ExampleContract exampleRespository(@Qualifier("exampleRetrofit") Retrofit retrofit) {    
    return retrofit.create(ExampleContract.class);
  }
}

Сервис

@Service
@Transactional
public class ExampleService {

  private ExampleContract exampleRepository;

  public ExampleService(ExampleContract exampleRepository) {
    this.exampleRepository = exampleRepository;
  }
}

1 Ответ

0 голосов
/ 31 мая 2018

У вас есть опечатка в объявлении bean-компонента 'exampleRe s pository'.

По умолчанию пружина вводит bean-объекты по своему типу, в вашем объявлении сервиса добавьте @Qualifier для объявления репозитория илиисправьте опечатку.

ниже приводится хорошая статья о работах по инъекции на основе имен https://www.logicbig.com/tutorials/spring-framework/spring-core/inject-bean-by-name.html

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