我有一个 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/