簡體   English   中英

包含Bean名稱會阻止創建

[英]Including Bean Name Prevents Creation

我有一個配置類(請參閱下文),該類創建Retrofit“ bean”,然后將這些bean(假定為)注入服務中。 但是,此時, 提供bean名稱時,似乎沒有在服務之前創建改造bean“ exampleRepository”,即“ @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;
  }
}

您的bean聲明“ exampleRe s pository”中有一個錯字。

默認情況下,spring按其類型注入bean,在服務聲明中為存儲庫聲明添加@Qualifier或更正拼寫錯誤。

以下是有關基於名稱的注入工作的好文章https://www.logicbig.com/tutorials/spring-framework/spring-core/inject-bean-by-name.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM