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:如果自定义工厂无法做到这一点,那么默认的 spring 是否可以?

Sidebar 2:如果第一部分和 Sidebar 1 都不可能,是否可以@Autowired将 conversionService 转换为转换器(以便他们可以轻松地相互调用)?@Autowired ConversionService 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 回答