1

Spring構成ファイルに依存関係を動的に挿入する方法を知る必要があります。たとえば、「クラスA」というビジネスロジッククラスがあります。そのクラス内で、「doSomething()」と呼ばれるメソッドを処理します。アプリケーションに応じて、このメソッドは2つの異なる方法で実行できます(同じメソッドの2つのタイプの実装)。そこで、このメソッドを使用して「Manager」というインターフェイスを宣言し、同じインターフェイスに対して2つの実装クラスを作成しました。それらを「Impl1」および「Impl2」と呼び、インターフェース「Manager」を実装します。

Interface Manager{
 void doSomething();
}

Class Impl1 implements Manager{ 

 public void doSomething(){
  //doIt like this way
 }

 Class Impl2 implements Manager{ 

 public void doSomething(){
  //doIt like that way
 }
}

クラスAには、SpringDIを介してデプロイ時に設定される「manager」と呼ばれる「Manager」インターフェースへの参照があります。そのインジェクションは、Impl1オブジェクトまたはImpl2オブジェクトのいずれかです。エンドユーザーが決定します。したがって、エンドユーザーにこの「doSomething()」メソッドを処理する方法を決定できる2つのオプションを提供する必要があります。エンドユーザーの選択に応じて、関連する実装クラス(Impl1またはImpl2)を挿入します。 )。

Class A{ 

 private Manager manager; //this can be either Impl1 or Impl2

 public void setManager(Manager manager){
  this.manager = manager;
 }

 public void performLogic(){
  manager.doSomething();
 }
}

エンドユーザーがその選択を行う機会は1回だけであり、その後、ユーザーがアプリケーションの新しいコピーを再度インストールする必要がない限り、アプリケーションはその実装を永久に使用します。Spring xmlファイルでのユーザーの選択に従って、関連する実装を動的に注入するにはどうすればよいですか?この状況を処理するための最良の方法は何ですか?アイデアは大歓迎です。

よろしくお願いします!

4

2 に答える 2

5

Springプロファイルを使用する必要があります。

2つのプロファイルを使用し、各実装をそれらの1つにラップします。次に、開始時にプロファイルの1つをアクティブにします(たとえば、システムプロパティを使用)。

于 2013-03-07T09:55:18.563 に答える
1

以下のようなものはどう思いますか:

Class A{ 

 @Autowired 
 @Qualifier("Impl1")
 private Manager manager1; // Impl1

 @Autowired 
 @Qualifier("Impl1")
 private Manager manager2; // Impl2

 // getter setter for manager1 and manager2

 public void performLogic(){
  getUserChoiceManager().doSomething();
 }

 private Manager getUserChoiceManager() {
   // return manager according to user choice
 }
}
于 2013-03-07T09:53:32.167 に答える