java - Spring Beans : Scan for Converters, 注入(inject) CustomConversionServiceFactory

标签 java spring configuration javabeans

我有一个 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 类的任何其他内容,但不能更改总体工具。

最佳答案

@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请简要提及它可用于收集一个类型的所有 beans,但我不知道它可以在没有 this thread by Grzegorz Oledzki 的情况下用于任何收集类型。它解决了我问题的一般形式,但沿着哲学路线进行。

关于java - Spring Beans : Scan for Converters, 注入(inject) CustomConversionServiceFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12094871/

相关文章:

java - 如何注入(inject)一个可以在运行时改变的值?

java - 使用 Java 8 将一个值列表与另一个值列表映射

java - 如何提取发送到 PrintStream 的内容?

java - 属性<beans :property name ="maximumSessions" value ="1"/> doesn't work

java - 用注解替换SimpleFormController(spring<3到4.3转换)

Spring PropertyPlaceholderConfigurer 没有将属性值传递给 bean

具有线程执行的 Java 套接字

java - 将 Java 框架保存为 Microsoft Word 或 PDF 文档?

java - Tomcat removeAbandoned 属性导致异常

Emacs:符号作为变量的值是无效的:custom-theme-load-path