ConversionServiceFactoryBean学习

简介

ConversionServiceFactoryBean 是 Spring 框架中的一个类,它实现了 FactoryBean 接口。这个类的主要作用是创建和配置 ConversionService 的实例,通常是一个 GenericConversionService 实例。FactoryBean 接口允许你在 Spring 容器中定义一个对象,该对象的实例化和配置过程由 FactoryBean 自身来控制,而不是由 Spring 容器直接实例化。

在 ConversionServiceFactoryBean 中,你可以配置多种转换器,包括 Converter、GenericConverter 和 ConditionalConverter,这些转换器会被注册到创建的 ConversionService 实例中。一旦配置完成,ConversionServiceFactoryBean 会生成一个 ConversionService 实例,这个实例可以被注入到其他 Spring bean 中,用于执行类型转换。

源码

public class ConversionServiceFactoryBean implements FactoryBean<ConversionService>, InitializingBean {

	@Nullable
	private Set<?> converters;

	@Nullable
	private GenericConversionService conversionService;


	/**
	 * Configure the set of custom converter objects that should be added:
	 * implementing {@link org.springframework.core.convert.converter.Converter},
	 * {@link org.springframework.core.convert.converter.ConverterFactory},
	 * or {@link org.springframework.core.convert.converter.GenericConverter}.
	 * 设置转换器
	 */
	public void setConverters(Set<?> converters) {
		this.converters = converters;
	}

	@Override
	public void afterPropertiesSet() {
		//创建默认的转换器服务
		this.conversionService = createConversionService();
		//将转换器注册到转换服务中
		ConversionServiceFactory.registerConverters(this.converters, this.conversionService);
	}

	/**
	 * Create the ConversionService instance returned by this factory bean.
	 * 

Creates a simple {@link GenericConversionService} instance by default. * Subclasses may override to customize the ConversionService instance that * gets created. */ protected GenericConversionService createConversionService() { return new DefaultConversionService(); } // implementing FactoryBean @Override @Nullable public ConversionService getObject() { return this.conversionService; } @Override public Class<? extends ConversionService> getObjectType() { return GenericConversionService.class; } @Override public boolean isSingleton() { return true; } }

示例

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">  
    <property name="converters">  
        <list>  
            <bean class="com.example.MyCustomConverter"/>  
              
        list>  
    property>  
bean>

在这个示例中,ConversionServiceFactoryBean 被配置为创建一个 ConversionService 实例,并将 MyCustomConverter 注册为该服务的一个转换器。

@Configuration  
public class AppConfig {  
  
    @Bean  
    public ConversionService conversionService() {  
        ConversionServiceFactoryBean factory = new ConversionServiceFactoryBean();  
        factory.setConverters(Arrays.asList(new MyCustomConverter()));  
        factory.afterPropertiesSet(); // 调用此方法以初始化ConversionService  
        return factory.getObject();  
    }  
}

一旦你配置了 ConversionServiceFactoryBean 并将其定义为一个 Spring bean,你就可以在其他地方通过依赖注入来使用这个 ConversionService。例如,你可以在一个服务类中注入 ConversionService,并使用它来执行类型转换。

总的来说,ConversionServiceFactoryBean 是 Spring 框架中用于创建和配置 ConversionService 实例的工厂类,它使得在 Spring 容器中管理和使用类型转换服务变得更加灵活和方便。

你可能感兴趣的:(Spring,学习,java)