6

次のように登録している MyAppConversionServiceFactoryBean があります。

<bean id="conversionService" class="com.MyProject.MyAppConversionServiceFactoryBean">
    <property name="messageSource" ref="messageSource"/>
    <property name="converters">
        <set>
            <bean class="com.MyProject.XRepresentationConverter" />
            <bean class="com.MyProject.YRepresentationConverter" />
            <bean class="com.MyProject.ZRepresentationConverter" />
        </set>
    </property>
</bean>

このリストに書き込むすべてのコンバーターを引き続きリストすることができますが、これが不要で、コンバーターが何らかの形で工場に自動的に登録されるように構成できるようにしたいと考えています。

サイドバー 1:カスタム ファクトリでそれができない場合、デフォルトのスプリング ファクトリでは可能ですか?

サイドバー 2:最初の部分もサイドバー 1 もできない場合@Autowired、conversionService をコンバーターに入れることはできますか (相互に簡単に呼び出すことができます)? サービスの作成がまだビジー状態である間にconversionService@Autowired ConversionService conversionServiceをオブジェクトに接続できないため、これまでに問題が発生しました。

注: Spring を使用していますが、Spring MVC は使用していません。私はそれを制御できないため、そのルートのソリューションは残念ながら使用できません。包括的なツールだけでなく、構成と Java クラスに関する他のほとんどすべてを変更できます。

4

1 に答える 1

8

質問に対する@Vikdorのコメントは、私を正しい方向に向けました。

@AutowiredSpring には、アノテーションを使用したスキャン プロセスを通じて Bean のコレクションを収集できるようです (そして、私が直接尋ねた人は誰もこれを知りませんでした) 。投稿の構成から得たのと同じ効果を得るために必要なものは次のとおりです。

applicationContent.xml持つ必要があります:

<context:component-scan base-package="com.MyProject"/>
<bean id="conversionService" class="com.MyProject.MyAppConversionServiceFactoryBean" />


MyAppConversionServiceFactoryBean.java:

public class MyAppConversionServiceFactoryBean implements
        FactoryBean<ConversionService>, InitializingBean {

    @Autowired
    private Set<BaseConverter> converters;

}


そして、すべてのコンバーターに@Component注釈が付けられました。

関連するドキュメントで@Autowiredは、タイプのすべての Bean を収集するために使用できると簡単に述べていますが、私の質問の一般的な形式に対処する Grzegorz Oledzki によるこのスレッドがなければ、任意のコレクション タイプにそれを実行できることを知りませんでした。しかし、それを哲学的なルートに落とします。

于 2012-08-23T15:59:42.887 に答える