복붙노트

[SPRING] 자바 구성으로 Spring ConversionService를 구성하는 방법은 무엇입니까?

SPRING

자바 구성으로 Spring ConversionService를 구성하는 방법은 무엇입니까?

나는 그런 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;
    }
}

컨피규레이션의이 부분은 컨텍스트로 스캔됩니다 - 디버거로 검사했습니다. 어디에서 문제가 될 수 있습니까?

해결법

  1. ==============================

    1.내 관점에서 당신의 문제는 콩 이름입니다. @Bean (name = "conversionService")을 사용하여 명시 적으로 이름을 설정하지 않으면 getConversionService가 사용됩니다.

    내 관점에서 당신의 문제는 콩 이름입니다. @Bean (name = "conversionService")을 사용하여 명시 적으로 이름을 설정하지 않으면 getConversionService가 사용됩니다.

    문서에서 :

  2. ==============================

    2.SpringMVC에서는 WebMvcConfigurerAdapter를 확장하여 Java 기반 구성에 사용할 수 있습니다. 사용자 정의 변환기를 등록하려면 "addFormatters"- 방법을 다음과 같이 수정할 수 있습니다.

    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();
        }
    
    }
    
  3. ==============================

    3.로깅을 활성화하면 여기에 설명 된대로 Spring이 만든 빈을 볼 수 있습니다.

    로깅을 활성화하면 여기에 설명 된대로 Spring이 만든 빈을 볼 수 있습니다.

    로그 구성

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

    로그 출력

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

    귀하의 코드를 복사 + 붙이면 이름을 변경하지 않고 작동했습니다. 다음과 같이 ConversionService를 삽입했습니다.

    @Resource
    private ConversionService conversionService;
    

    이것은 유형별로 Autowiring 때문에 작동합니다. 아마 두 개의 ConversionService 빈을 가지고있을 것입니다.

  4. from https://stackoverflow.com/questions/11273443/how-to-configure-spring-conversionservice-with-java-config by cc-by-sa and MIT license