【问题标题】:Spring Beans: Scan for Converters, Inject into CustomConversionServiceFactorySpring Beans:扫描转换器,注入 CustomConversionServiceFactory
【发布时间】:2012-08-19 03:50:50
【问题描述】:

我有一个我正在注册的 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 工厂?

侧边栏 2: 如果第一部分和侧边栏 1 都不可能,是否可以 @Autowired 转换服务进入转换器(以便他们可以轻松地相互调用)?尝试@Autowired ConversionService conversionService 之前给我带来了一些问题,因为在conversionService 仍在忙于创建服务时无法将其连接到对象中。

注意:我们使用的是 Spring,而不是 Spring MVC。我无法控制这一点,因此不幸的是,该路线上的任何解决方案都将无法使用。我几乎可以更改有关配置和 Java 类的任何其他内容,但不能更改总体工具。

【问题讨论】:

  • 你看到这个问题的答案了吗:stackoverflow.com/questions/2799316/…
  • @Vikdor 我之前实际上已经阅读过这个问题,但我没有在这种情况下解释它。好决定。再次初步查看它似乎暗示它对我有用。如果它确实有效,我会发布一个答案。谢谢!

标签: java spring configuration javabeans


【解决方案1】:

@Vikdor 对这个问题的评论为我指明了正确的方向。

Spring 显然能够(我亲自询问过的人都不知道这一点)通过带有 @Autowired 注释的扫描过程收集 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 注释。

Relevant Docs on @Autowired 简要提到它可用于收集一种类型的所有 bean,但我不知道如果没有 this thread by Grzegorz Oledzki 它可以解决我问题的通用形式,它可以用于任何收集类型,但将其沿用了哲学路线。

【讨论】:

    猜你喜欢
    • 2011-07-05
    • 2011-09-05
    • 1970-01-01
    • 2013-12-23
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多