簡體   English   中英

向Spring bean注入依賴

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

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