将bean注入spring java配置类

时间:2014-05-23 00:23:23

标签: java spring spring-mvc dependency-injection

我有一个使用@Configuration注释的配置类,并且还扩展了RepositoryRestMvcConfiguration。

作为扩展类的一部分,有一些可覆盖的方法允许配置bean配方。其中一个是配置弹簧组件可用的转换服务。

我想将一些bean注入一个迭代的列表中并通过这个覆盖的方法添加为转换服务,我的配置java类定义如下:

@Configuration
@EnableJpaRepositories(basePackages = "com.example.model.repositories")
public class DataConfig extends RepositoryRestMvcConfiguration {

    List<Converter<?,?>> converters;
    //get
    //set

    @Override
    protected void configureConversionService(ConfigurableConversionService conversionService){
        for(Converter converter : converter){
            conversionService.addConverter(converter);
        }
    }
}

以下定义了我希望在app-context.xml文件中注入的转换器

<beans>
    <bean id="fooToBarConverter" class="com.example.model.converters.FooToBarConverter" />
    <bean id="barToFooConverter" class="com.example.model.converters.BarToFooConverter" />

    <util:list id="myConverters" value-type="org.springframework.core.convert.converter.Converter">
        <ref bean="barToFooConverter"/>
        <ref bean="fooToBarConverter" />
    </util:list>
</beans>

有没有更好的方法通过spring配置提供这些转换器,或者我是否需要明确地将它们列为我的配置类中包含的函数的输出,如:

@Bean
public List<Converter<?,?> myConverters(){
    Arrays.asList(new FooToBarConverter(), new BarToFooConverter());
}

非常感谢您的帮助。

P.S。既然你在春天很擅长,你会介意看看我spring-data-rest-mvc related question吗?拜托,谢谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,某种类型的任何@Autowired(或@Resource)注释Collection(或ListSet等)都将包含所有bean在上下文中发现的那种类型。您可以在setter中添加@Autowired,让Spring为您注入控制器。

如果您需要更精细地控制应该配置哪个转换器以及哪个转换器不应该配置,那么您可能应该完全配置ConversionService