1

2 つの Maven プロジェクト、Web アプリ、および「サービス」プロジェクトがあります。私はすべてを一緒に配線するためにスプリングを使用しています。application-context.xml でマップを作成し、それをクラスに挿入したいと考えています。Web アプリケーションを起動しようとすると、エラー メッセージが表示されます。

これが私のクラスです:

 @Named("tranformer")
 public class IdentifierTransformerImpl implements IdentifierTransformer {


private Map<String, String> identifierMap;

@Inject
public IdentifierTransformerImpl(
        @Named("identifierMap")
        final Map<String, String> identifierMap) {
            this.identifierMap= identifierMap;
}

および application-context.xml:

    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util-3.0.xsd"

  <util:map id="identifierMap" map-class="java.util.HashMap">
    <entry key="Apple" value="fruit"/>
    <entry key="BlackBerry" value="fruit"/>
    <entry key="Android" value="robot"/>
   <util:map>

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

次のエラーが表示されます。

 ..... No matching bean of type [java.lang.String] found for dependency [map with value type java.lang.String]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.inject.Named(value=identifierMap)

これは、アプリケーションコンテキストで文字列を定義し、コンストラクターがそれをクラスに挿入するときに機能します。マップに対して同じことを行うにはどうすればよいですか?

4

3 に答える 3

2

Map コレクションは @Inject または @Autowired アノテーションではサポートされていないと思います (参照: Spring は Map Bean を自動配線できません)。ただし、その回答で示唆されているように、マップにリソースとして注釈を付けることで、マップを自動配線することができました。これを試して:

@Resource(name="identifierMap") private Map<String, String> identifierMap;

欠点はもちろん、コンストラクターの自動配線ではなく、フィールドです。コンストラクターの自動配線を介してそれを行う方法をまだ見つけていません

于 2013-04-30T01:29:30.293 に答える
0

それがxmlファイルの直接のコピー/貼り付けである場合、<util:map>タグを終了していません。2番目にa がありません/

于 2013-05-04T23:15:50.120 に答える
-1

コンストラクタインジェクションあり。

@Inject
public IdentifierTransformerImpl(
    @Value(value = "#{identifierMap}")
    final Map<String, String> identifierMap) {
        this.identifierMap= identifierMap;
}

理想的ではありませんが、Spring はより良いオプションを提供することを拒否します。

詳細については、https://jira.spring.io/browse/SPR-8519をご覧ください。

于 2015-11-21T20:01:57.830 に答える