私は抽象クラスを持っています:
@Component
public abstract class BaseReport {
public void export() {
...
}
そして、それを拡張し、export() メソッドをオーバーライドする (またはオーバーライドしない) 一連のクラス。
@Component
public final class Report1 extends BaseReport
@Component
public final class Report2 extends BaseReport
私のテストのほとんどは、BaseReport を拡張する具象クラスを問題なく自動配線します。
public class Report1Test extends BaseTest {
@Autowired
Report1 _report;
public class Report2Test extends BaseTest {
@Autowired
Report2 _report;
これは、 BaseReportを拡張するすべてのクラスのオートワイヤリングでうまく機能します。しかし、export() メソッドをテストするために、抽象クラス BaseReport 自体をオートワイヤーする必要もあります。
public class BaseReportTest extends BaseTest {
@Autowired
BaseReport _report;
実行しようとすると、悪名高いものになります:
タイプ BaseReport の一意の Bean が定義されていません: 単一の一致する Bean が必要ですが、2 [Report1、Report2] が見つかりました。
@Qualifier を使用してみましたが、@Qualifier の問題は、(私が理解しているように) それを使用して、使用したいクラス (インターフェイスを実装するか、抽象クラスを拡張する) を Spring に伝えることです。しかし、それは私の場合ではありません。抽象クラスそのものを使いたい。
次のように @Resource も使用してみました。
public class BaseReportTest extends BaseTest {
@Resource(name = "baseReport")
BaseReport _report;
Spring は、この名前の Bean はないと教えてくれました。:(
これどうやってするの?
乾杯。