0
我想爲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) {//...}
在我的配置類
然後,我創建一個豆,但我需要它傳遞MyServiceClient
對象在構造函數中,而美中不足的是,我不能讓MyServiceClient
豆,因爲它從外部包的我無法修改它。
@Configuration
public class MyServiceProxyConfiguration {
@Bean(name = MyServiceProxy.BEAN_NAME)
public MyServiceProxy getMyServiceProxy(MyServiceClient client) { // could not autowire client
return new MyServiceProxyImpl(client);
}
}
所以我想幹什麼,是能夠通過/自動裝配的參數getMyServiceProxy
豆。目前IntelliJ給我一個錯誤無法自動連接客戶端。這怎麼能實現?
UPDATE
會像下面這樣的工作?因爲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);
}
}
如何從方法中刪除參數,並使用'返回new MyServiceProxyImpl(MyServiceClient.getInstance())'? –
在您的更新代碼中,MyServiceClient不會被創建爲Bean,因爲MyServiceClientBuilder沒有註釋,Spring將忽略'MyServiceClientBuilder'中的'@ Bean'註釋。但是在我的回答中做了類似的事情,你有沒有檢查過它? –
@BojanTrajkovski嗨,是的,我有,我認爲你是對的。我會去嘗試一下。謝謝! – zwiebl