[英]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.