3

クラスに として注釈を付ける場合@Autowired、それはインターフェイスである必要がありますか、それともクラスにすることができますか?

私が見たSpringの使用例はすべて、インターフェースを使用してからクラスに実装しています。次に、インターフェイス タイプを使用して Concrete クラスの関数を呼び出します。@Autowiredインターフェイスではなく、具体的なクラスに単純に追加するだけではいけませんか。

プログラムと Java のインターフェイスの類似性については知っていますが、ポリモーフィズムに依存していないのであれば、なぜインターフェイスを作成する必要があるのでしょうか。

4

3 に答える 3

4

いいえ、インターフェースを使用する必要はありません。Spring に関する限り、これはまったく問題ありません。

@Service
public class FooService {
    @Autowired
    private FooDao fooDao;
}

または、建設インジェクションに行くこともできます:

@Service
public class FooService {

    private final FooDao fooDao;

    public FooService(FooDao fooDao) {
        this.fooDao = fooDao;
    }
}

多くの場合、インターフェイスは時代遅れの慣習であり、その後の世代ごとに繰り返されます。必要ない場合は使用しないでください。また、実装が常に 1 つだけである場合や、そのようなクラスをモックしたい場合 (最新のモック フレームワークは問題なくクラスをモックする場合) は必要ありません。

上記の例のように、具体的なクラスを注入することにも問題はありませんFooDao。それにはいくつかの技術的な意味があります。プロキシしますが、理解できないものは何もありません。

于 2012-10-29T15:28:59.617 に答える
3

技術的@Autowiredには、実装またはインターフェースに使用できます。春は関係ありません。インターフェイスの注入は設計戦略です。

于 2012-10-29T15:30:10.333 に答える
2

@Autowired は、インターフェイスの代わりにクラスでも使用できます。ただし、インターフェイスを使用すると、コンポーネント間のハードカップリングが減少するため、より良い方法になります。

于 2012-10-30T06:03:35.780 に答える