7

私はそのようなxmlを持っています:

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <list>
                <bean class="converters.AddressToStringConverter" />
                <bean class="converters.StringToAddressConverter" />
            </list>
        </property>
    </bean>

問題なくコンバーターを構成します。

しかし、このコードは同じようにできません:

@Configuration
public class ConversionConfiguration {

    @Bean
    public ConversionService getConversionService() {
        ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean();
        bean.setConverters(getConverters());
        bean.afterPropertiesSet();
        ConversionService object = bean.getObject();
        return object;
    }

    private Set<Converter> getConverters() {
        Set<Converter> converters = new HashSet<Converter>();

        converters.add(new AddressToStringConverter());
        converters.add(new StringToAddressConverter());

        return converters;
    }
}

この構成の一部は、コンテキストによってスキャンされます-デバッガーで確認しました。どこに問題があるのでしょうか?

4

3 に答える 3

10

私の観点から、あなたの問題はBean名前です。明示的に名前を設定しない@Bean(name="conversionService")と、使用される名前はgetConversionService.

ドキュメントから:

この Bean の名前、または複数の場合はこの Bean の別名。指定されていない場合、Bean の名前はアノテーション付きメソッドの名前になります。指定した場合、メソッド名は無視されます。

于 2012-06-30T10:59:29.420 に答える
8

SpringMVC では、WebMvcConfigurerAdapter を拡張して Java ベースの構成に使用できます。カスタム コンバーターを登録するには、「addFormatters」メソッドを次のように変更します。

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "..." })
public class ApplicationConfiguration extends WebMvcConfigurerAdapter
{
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)
    {
        configurer.enable();
    }

    @Bean
    public InternalResourceViewResolver getInternalResourceViewResolver()
    {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }

    @Override
    public void addFormatters(FormatterRegistry formatterRegistry)
    {
        formatterRegistry.addConverter(getMyConverter());
    }

    @Bean
    public StringToCounterConverter getMyConverter()
    {
        return new StringToCounterConverter();
    }

}
于 2013-12-12T21:13:39.013 に答える
0

ロギングを有効にすると、ここで説明されているように、Spring によって作成された Bean が表示されます。

ログ構成

    <logger name="org.springframework.beans" level="DEBUG" />

ログ出力

    DEBUG (AbstractAutowireCapableBeanFactory.java:458) - Finished creating instance of bean 'getConversionService'

コードをコピーして貼り付けたところ、名前を変更せずに機能しました。私は次のように注入しましたConversionService

@Resource
private ConversionService conversionService;

これは、タイプによる自動配線のために機能します。つまり、2 つのConversionService豆を持っていた可能性があります。

于 2012-12-21T15:52:38.467 に答える