2

これは正確には何が原因ですか?

org.springframework.beans.factory.NoSuchBeanDefinitionException: \
No unique bean of type [fi.utu.keycard.business.KeyCardManager] \
is defined: expected single matching bean but found 2: \
[dataBaseTarget, database]

// etc. (rest of Stack Trace is irrelevant)

私が必要としているのは、バリデーター、LDAP 接続、データベース接続の 3 つの自動配線です。

私はそれを呼びます:

@Controller
Controller(KeyCardManager database,
           LdapPersonDao personManager,
           GiveFormValidator validator)

これらのパラメーターの順序を変更すると、別の Bean が原因でエラーが発生するようです。サインインしていないため、UserDetails などはありません。

4

2 に答える 2

3

修正はおそらく次のようなものです:

public Controller(
    @Qualifier("beanQualifier") KeyCardManager database,
    LdapPersonDao personManager,
    GiveFormValidator validator
)

アプリケーションコンテキストには明らかに2つのタイプのBeanがあるKeyCardManagerため、どちらをワイヤリングするかをコンテキストに指示する必要があります。

残念ながら、この@QualifierメカニズムはBean名では機能しません。実際のBeanに対応する注釈を付けるか、XMLBean定義に要素を@Qualifier追加する必要があります。<qualifier>

アノテーションは@ResourceBean名で機能しますが、コンストラクターパラメーターをサポートしていません(これはSpringのせいではなく、JSR-250の標準アノテーションです@Target({TYPE, FIELD, METHOD})

参照:


トラブルシューティング

コンテキストに同じタイプのBeanが2つある理由がわからない場合は、まずBeanインターフェースに移動します(KeyCardManagerインターフェースであると想定しますが、そうでない場合は、クラスに対して同じことを行います)。 Eclipseselect Navigate > Open Type HierarchyKeyCardManager(それ自体を含む)から継承する複数の具象クラスを見つけた場合はKeyCardManager、おそらく問題があります。

そうでない場合は、アプリケーションコンテキストに同じタイプのBeanが2つある可能性があります。発生する可能性のある1つの方法は、XMLスキャンとクラスパススキャンの両方を使用してBeanを定義する場合です。つまり、XMLに次の行がある場合:

<context:component-scan base-package="org.example"/>

org.exampleパッケージからBeanを手動で配線しないように注意してください(または、Beanが二重になり、問題が発生する可能性があります)。

于 2011-02-04T11:54:42.127 に答える
1

org.springframework.beans.factory.NoSuchBeanDefinitionException: タイプ [fi.utu.keycard.business.KeyCardManager] の一意の Bean が定義されていません: 単一の一致する Bean が予想されますが、2 が見つかりました: [dataBaseTarget, database]

クラスタイプごとに自動配線しているようです。ただし、同じクラスのコンテキストで利用可能な複数の Bean があります。どれがdataBase&dataBaseTarget

タイプ別

コンテナー内にプロパティ タイプの Bean が 1 つだけある場合、プロパティを自動配線できます。複数ある場合、致命的な例外がスローされます。これは、その Bean に対して byType 自動配線を使用できないことを示します。一致する Bean がない場合、何も起こりません。プロパティが設定されていません。これが望ましくない場合は、dependency-check="objects" 属性値を設定して、この場合にエラーをスローするように指定します。

于 2011-02-04T11:52:28.337 に答える