8

サービスの2つのコンポーネントでSpringに少し問題があります。

私はこのコンポーネントを持っています:

@Component
public class SmartCardWrapper 

そしてこれ:

@Component
public class DummySmartCardWrapper extends SmartCardWrapper

サービスは両方とも自動配線されますが、春は次の期待により失敗します。

org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.cinebot.smartcard.SmartCardWrapper] is defined: expected single matching bean but found 2: [dummySmartCardWrapper, smartCardWrapper]

なぜクラス名を使用しないのですか?

4

1 に答える 1

7

これは、Spring の最も基本的な概念の 1 つである制御の反転です。

実装タイプを使用して依存関係を宣言する必要はありません (実装との結合を避けるため)。代わりにインターフェースまたはスーパークラスを使用してそれらを宣言し、Spring にコンテキスト内の適切な実装クラスを見つけさせることができます。

つまり、依存する Bean を変更せずに Bean の実装クラスを変更したい場合があるため、Bean は実装クラスによって区別されません。同じタイプの異なる Bean を区別する場合は、代わりに論理 Bean 名を使用します。

@Autowired @Qualifier("smartCardWrapper")
private SmartCardWrapper smardCardWrapper;

@Autowired @Qualifier("dummySmartCardWrapper")
private SmartCardWrapper dummySmardCardWrapper;
于 2012-07-04T08:48:18.073 に答える