2

ブループリントを使用してサービスとしてエクスポートするインターフェイスを実装する「ジョブ」と呼ばれる Java クラスがあります。クラスは blueprint xml ファイルで scope="prototype" を持つ Bean として定義されており、サービスはその Bean を参照していますが、Job のインスタンス メソッドの System.out.println(this) ステートメントから確認できます。呼び出し元バンドルからサービスにアクセスするたびに、バンドルを開始したときに作成されたジョブ クラスの同じインスタンスが再利用されます。私の呼び出し元バンドルはサービス参照を検索し、context.getService(serviceReferences[0]) を呼び出してジョブ サービスへの参照を取得し、そのサービスのメソッド (例: Job.run()) を呼び出します。

サービス Bean def プロトタイプのスコープを作成すると、呼び出し元バンドルから getService を呼び出すたびに Job の新しいインスタンスが生成されると考えていましたが、実験では、同じオブジェクト インスタンスを使用していることがわかります。

では、同じオブジェクトを再利用するのではなく、サービスを呼び出して毎回 Job の新しいインスタンスを作成するにはどうすればよいでしょうか?

また、bean インターフェースにはこれを行うための set メソッドがないため、bean Job にプロパティとして挿入された別のサービス参照も必要です。そのため、setX() メソッドでプロパティを注入できるように、新しいインスタンスをそれぞれ Bean ジョブとして作成する必要があります。

4

1 に答える 1