0

私は、瓶を消費しているプロジェクトAを持っています。B.jar(ここでBはプロジェクトAの依存関係として使用される別のプロジェクトです)、Bean(種類はSpring-gemfire)すべての必要なデータをマップに保持します。 このマップビーンはプロジェクトで使用されています(私のプロジェクトにはjarとして含まれています)。つまり、Bはキャッシュのプロパティを読み込みますが、何もできません。外部の瓶でのスプリング依存性注入

プロジェクトBのための私のWebアプリケーション-config.xmlの

<!-- Injecting bean in our A application --> 
    <bean id="foo" class="com.abc.solutions.Foo" init-method="loadFoo"> 
      <property name="bar1" ref="gemFireBean"/> 
      <property name="bar2" ref="commonBean"/> 
    </bean> 

    <bean id="b2" class="java.util.HashMap" 
     factory-bean="foo" factory-method="createB2" autowire="byName"> 
    </bean> 

上記豆B2は、(私のプロジェクトAでJARとして含まれる)外部のプロジェクトBに使用しなければなりません。

CLAS罪プロジェクトB2

@Autowired 
    @Qualifier("b2") 
    private Map<String, String> mapFromA; 

の一部が、私は任意の助けが理解されるであろう

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [java.lang.String] found for dependency 

を取得しています。

答えて

0

短い答え:HashMap(または配列またはコレクションのような他の汎用コンテナは)春の豆はいけません。 ビジネスオブジェクトのみがインフラストラクチャコンテナではなく、Beanである必要があります。

マップの周りにカスタムオブジェクトを作成し、これを挿入することで回避できます。あなたの場合は、foo beanを注入し、プログラムからマップを取得する必要があります。

でも、入力されたマップは限り期待キータイプが 文字列であるとしてautowiredすることができます:あなたのケースで何が起こる


the @Autowired section of the manualで輪郭があります。地図値は、予想されるタイプ、 のすべてのBeanが含まれていますとキーが対応するBeanの名前が含まれます:

public class MovieRecommender { 

    private Map<String, MovieCatalog> movieCatalogs; 

    @Autowired 
    public void setMovieCatalogs(Map<String, MovieCatalog> movieCatalogs) { 
     this.movieCatalogs = movieCatalogs; 
    } 

    // ... 

} 

すなわちをSpringは、キーがBean名で、値がString型のBeanであるマップが必要だと考えています。

0

コレクションまたはマップタイプとして定義されているBeanは、タイプマッチングが適切に適用されないため、@Autowiredから挿入できません。そのようなBeanには@Resourceを使用し、特定のコレクションまたはマップBeanを一意の名前で参照します。

は参照してください。beans-property-is-not-setting-from-utillist-object

と春doc