我想向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);
}
}
答案 0 :(得分:2)
您可以在配置文件中将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);
}
}
我没有测试过这段代码,但它应该可以运行。