0

次のように定義されたインターフェイスがあります。

public interface DocExporter{
      public void exportDoc();
}

2 つの実装クラスを次のように定義します。

@Service(value="docExporter")   
@Scope(value="BeanDefinition.SCOPE_PROTOTYPE)
public class PdfDocExporter implements DocExporter{
   public void exportDoc(){
    // do Pdf Export stuff
   }
}

@Service(value="docExporter")
@Scope(value="BeanDefinition.SCOPE_PROTOTYPE)
public class ExcelDocExporter implements DocExporter{
   public void exportDoc(){
    // do Excel Export stuff
   }
 }

だから私は次のように言うことができます:

@Name("docExportReporter")
@Scope(ScopeType.EVENT)
public class DocExportReporter {
@In("#{docExporter}")
private DocExporter pdfDocExporter;

@In("#{docExporter}")
private DocExporter excelDocExporter;

   @Asynchronous
   public void reportGen(){
             **excelDocExporter.exportDoc()**  // THIS THROWS Seam Exception @In attribute requires a not null value

   }
  }

Spring で Seam を使用するのは初めてで、両方の impl クラスで @Service の値が "docExporter" (インターフェースの名前) になるか、それとも "pdfDocExporter" "excelDocExporter" のようになるかを知りたいです。

上記で、reportGen async メソッド内で pdfDocExporter または excelDocExporter オブジェクトを使用する場合、@In 属性には null 以外の値の例外が必要です。インターフェースの 2 つの実装を 3 番目のクラスで宣言し、Seam @Asynchronous アノテーションで正常に動作させることはできますか?

4

1 に答える 1

0

同じ名前の2つのコンポーネントを持つことはできません。そうしないと、Seamはどちらを注入するかわかりません。2つの異なる名前を使用します。

于 2012-10-04T13:12:22.813 に答える