![](/img/trans.png)
[英]Injecting UserService into SecurityConfiguration in jhipster leads to spring bean circular dependency
[英]Injecting dependency to a Spring bean
我想向Spring bean注入單例對象依賴項。 問題是我無法訪問和修改要注入其對象的類。 讓我描述一下這個例子。
所以我有我的界面,以及該界面的實現,如下所示。
public interface MyServiceProxy {
String BEAN_NAME = "MyServiceProxy";
Data getData(String dataId);
}
public class MyServiceProxyImpl implements MyServiceProxy {
private final MyServiceClient client;
public MyServiceProxyImpl(MyServiceClient client) {
this.client = client;
}
@Override
public Data getData(String dataId) {//...}
然后在我的Configuration類中,我正在創建一個Bean,但是我需要在構造函數中將其傳遞給MyServiceClient
對象,但要注意的是,我不能使MyServiceClient
成為一個Bean,因為它來自外部包,並且無法修改它。
@Configuration
public class MyServiceProxyConfiguration {
@Bean(name = MyServiceProxy.BEAN_NAME)
public MyServiceProxy getMyServiceProxy(MyServiceClient client) { // could not autowire client
return new MyServiceProxyImpl(client);
}
}
因此,我想做的是能夠將參數傳遞/自動裝配到getMyServiceProxy
bean。 當前IntelliJ給我一個錯誤無法自動連接客戶端 。 如何做到這一點?
更新
可以進行以下工作嗎? 因為IntelliJ仍在報告“無法自動裝配”錯誤。 因此,如果我創建了一個返回要注入的client
的bean方法,然后將@Inject批注添加到要注入的方法中。
public class MyServiceClientBuilder {
private final ClientBuilder builder;
public MyServiceClientBuilder(ClientBuilder builder) {
this.builder = builder;
}
@Bean
public MyServiceClient build() {
return builder.newClient();
}
@Configuration
public class MyServiceProxyConfiguration {
@Inject
@Bean(name = MyServiceProxy.BEAN_NAME)
public MyServiceProxy getMyServiceProxy(MyServiceClient client) { // could not autowire client
return new MyServiceProxyImpl(client);
}
}
您可以像這樣在配置文件中將MyServiceClient
定義為單獨的bean:
@Configuration
public class MyServiceProxyConfiguration {
@Bean
public MyServiceClient getMyServiceClient () {
return MyServiceClient.getInstance(); //initiate MyServiceClient
}
@Bean(name = MyServiceProxy.BEAN_NAME)
public MyServiceProxy getMyServiceProxy(MyServiceClient client) {
return new MyServiceProxyImpl(client);
}
}
我尚未測試此代碼,但它應該可以工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.