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にautowire /引数を渡すことができることです。現在IntelliJは私にエラーを与えていますクライアントautowireできませんでした。これはどのように達成できますか?次の作品のような
UPDATE
う何か? IntelliJはまだ「autowireできませんでした」というエラーを報告しているためです。ですから、私が注入したい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);
}
}
メソッドから引数を取り除き、 'return new MyServiceProxyImpl(MyServiceClient.getInstance())'を使うのはどうですか? –
更新されたコードでは、MyServiceClientBuilderに注釈がなく、Springが 'MyServiceClientBuilder'の' @ Bean'注釈を無視するだけなので、 'MyServiceClient'はBeanとして作成されません。しかし、私の答えは似たようなものがあります。あなたはそれをチェックしましたか? –
@BojanTrajkovskiこんにちは、はい、私はあなたが正しいと思います。私はそれを試みるつもりです。ありがとう! – zwiebl