2013-04-12 14 views
8

私は抽象クラス持って定義されていない:春Autowire注釈:いいえ独自のBeanが

@Component 
public abstract class BaseReport { 

    public void export() { 
    ... 
} 

そして、それを拡張するクラスの束を、およびエクスポート()メソッドをオーバーライドする(またはしません) 。

public class Report1Test extends BaseTest { 

    @Autowired 
    Report1 _report; 

public class Report2Test extends BaseTest { 

    @Autowired 
    Report2 _report; 

これは BaseReportを拡張すべてのクラスのオートワイヤリングのために正常に動作します:問題なく、BaseReportを拡張する具象クラスautowire私のテストのほとんど

@Component 
public final class Report1 extends BaseReport 

@Component 
public final class Report2 extends BaseReport 

。しかし、export()メソッドをテストするために、抽象クラスそのもの(BaseReport)をオートワイヤリングする必要もあります。

public class BaseReportTest extends BaseTest { 

    @Autowired 
    BaseReport _report; 

私はそれを実行しようとすると、私は悪名高いが出る:タイプBaseReportの

ませユニークBeanが定義されていない:予想単一マッチング豆が、2 [レポート1、第2報]を見つけました。

@Qualifierを使用しようとしましたが、@Qualifierの問題は、(私が理解しているように)Springを使用して、Interfaceを実装するクラスか、Abstractクラスを拡張するかをSpringに伝えることです。しかし、それは私の場合ではありません。私は抽象クラスそのものを使いたい。

私はまた、このように、@Resourceを使用してみました:

public class BaseReportTest extends BaseTest { 

    @Resource(name = "baseReport") 
    BaseReport _report; 

春、この名前を持つBeanが存在しないと言われます。 :(

私はこの?

乾杯をどのように行うことができます。

答えて

13

抽象クラスはインスタンス化できない、あなたは具体的な実装を使用する必要があります。通常のJavaのように同じ 、あなたがインスタンス化しようとした場合抽象クラス内で抽象メソッドを実装するように指示します。無名クラスが作成されます。抽象クラスのインストラクションではありませんが、その抽象クラスの新しいサブクラスでもあります。

基本クラスを拡張するクラス、Report1とReport2、 Springには、要件に合致する複数のクラスがあり、どのクラスを選択するかはわかりません。したがって、複数の一致するBeanが存在するというエラーが発生します。

"アダプター"を基本的に作成して、基底クラスを拡張し、抽象メソッドを実装するが、何もしない具体的なクラスを作成することができます。その後、その実装をオートワイヤリングし、それに対してテストすることができます。しかし、抽象クラスは、レポート1と2をテストしているので、すでにテストされているはずです。基本クラスでエラーが発生した場合は、使用しないロジックがバグを引き起こしていることを意味します。また、テスト用のCoveageツールを使用すると、そのように未使用のコードを見つけることができます。

+0

あなたは絶対に正しいです。あなたの返信を読んだ後、私はもう一度見て、十分に、私は少し問題を誤解していた。 具体的なクラスはすべてBaseReportを拡張し、export()メソッドを実装しますが、export()メソッドはBaseReportからではなく、BaseReportとすべての具体的なレポートが実装するIReportインターフェイスから来ます。 BaseReportのexport()メソッドがないため、BaseReportのexport()メソッドをテストする必要はありません!私はすでにそれぞれの具象クラスのexport()メソッドをテストしているので、私の作業は完了です。 多くのご協力ありがとうございます。 –