[解決済み] 一意なビーンによる春の自動配線。Spring は一致する Bean が 1 つであると予想していたが、2 つ見つかった
質問
私は、WebアプリケーションのためにSpringを使用していくつかのビーン(依存性注入のために)を自動配線しようとしています。 あるコントローラBeanは別のBeanを含み、そのBeanは別のBeanの集合のハッシュマップを保持します。 今のところ、マップは1つのエントリしか持っていません。 tomcatで実行し、サービスを呼び出すと、(コントローラで保持されている)2番目のBeanがユニークでないというエラーが発生します。
No unique bean of type [com.hp.it.km.search.web.suggestion.SuggestionService] is defined: expected single matching bean but found 2: [suggestionService, SuggestionService]
しかし、私はSpringと自動配線に慣れていないので、何か基本的なことを見逃しているかもしれません。 xmlのソースコードと2つのクラスは以下の通りです。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:component-scan base-package="com.hp.it.km.search.web.suggestion" />
<mvc:annotation-driven />
<context:annotation-config />
<bean id="SuggestionController" class="com.hp.it.km.search.web.suggestion.SuggestionController">
<property name="service">
<ref bean="SuggestionService" />
</property>
</bean>
<bean id="SuggestionService" class="com.hp.it.km.search.web.suggestion.SuggestionService">
<property name="indexSearchers">
<map>
<entry key="KMSearcher"> <ref bean="KMSearcherBean"></ref></entry>
</map>
</property>
</bean>
<bean id="KMSearcherBean" class="com.hp.it.km.search.web.suggestion.SuggestionIndexSearcher">
<constructor-arg index="0" value="KMSearcher" />
<constructor-arg index="1" value="C://dev//workspace//search-restful-webapp//src//main//resources//indexes//keyword" />
</bean>
オートワイヤードコントローラとサービスビーンに関連するクラスはこちらです。
@Controller
public class SuggestionController {
private SuggestionService service;
@Autowired
public void setService(SuggestionService service) {
this.service = service;
}
public SuggestionService getService() {
return service;
}
そして...
@Component
public class SuggestionService {
private Map<String, IndexSearcher> indexSearchers = new HashMap<String, IndexSearcher>();
@Autowired
public void setIndexSearchers(Map<String, IndexSearcher> indexSearchers) {
this.indexSearchers = indexSearchers;
}
public SuggestionService() {
super(); }
助けてください
解決方法は?
この問題は、SuggestionServiceタイプのBeanを@ComponentアノテーションとXMLコンフィグで作成したことに起因しています。JB Nizet氏の説明によると、@Componentで作成されたsuggestionServiceという名前のBeanと、XMLで作成されたsuggestionServiceという名前のBeanが作成されることになるそうです。
SuggestionService を @Autowired で参照すると、コントローラ内で Spring はデフォルトで "by type" を自動配線し、タイプ 'SuggestionService' の 2 つの Bean を見つけます。
次のようにすることができます。
-
サービスから@Componentを削除し、XML経由のマッピングに依存する。
-
SuggestionServiceをXMLから削除し、依存関係を自動配線する - indexSearchersマップを注入するためにutil:mapを使用します。
-
Autowiredの代わりに@Resourceを使用して、その名前でBeanを選択します。
@Resource(name="suggestionService") private SuggestionService service;
または
@Resource(name="SuggestionService")
private SuggestionService service;
3番目は汚い修正で、他の方法でBeanの衝突を解決するのがベストです。
関連
-
[解決済み] ユニットテストから ApplicationContext を読み込むのに失敗しました。FileNotFound
-
[解決済み] 一意なビーンによる春の自動配線。Spring は一致する Bean が 1 つであると予想していたが、2 つ見つかった
-
[解決済み] NamedParameterJDBCTemplate を使用して挿入すると、「無効な列の種類です」という例外が発生する。
-
[解決済み] CommandLineRunnerの実行に失敗しました - Spring Batch
-
SLF4J:クラスパスに複数のSLF4Jバインディングが含まれる問題 解決済み
-
Springフレームワークを使用したアイデアで、コンテキストの初期化中に例外が発生し、リフレッシュの試みがキャンセルされる問題
-
[解決済み】SpringのGA、RC、M2リリースの違いは何ですか?
-
[解決済み] Spring RestTemplateのタイムアウト
-
[解決済み] Spring 3 RequestMapping。パスの値を取得する
-
[解決済み] コンテンツタイプ 'application/x-www-form-urlencoded;charset=UTF-8' は @RequestBody MultiValueMap ではサポートされていません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】自動配線された依存関係のインジェクションに失敗しました。
-
[解決済み】Unit TestからApplicationContextを読み込むのに失敗しました。FileNotFound
-
[解決済み] Spring Batchのステップスコープの仕組み
-
applicationContext の読み込みに失敗しました。
-
SpringBootのテスト
-
[解決済み】ビーン初期化完了後にメソッドを呼び出すには?
-
[解決済み】IntelliJから実行するときにSpring Bootプロファイルを有効にするにはどうすればよいですか?
-
[解決済み】Spring MVCのApplicationContextとWebApplicationContextの違いは何ですか?
-
[解決済み] Spring RESTfulアプリケーションでResponseEntity<T>と@RestControllerを使用する場合
-
[解決済み] コンテンツタイプ 'application/x-www-form-urlencoded;charset=UTF-8' は @RequestBody MultiValueMap ではサポートされていません。