是否可以创建一个POJO bean,它可以被Spring视为FactoryBean
。所以我想创建一个FactoryBean
(包含getObject
,getType
,isSingleton
等类的类,但不会导入任何特定于Spring的类。因此,它不会实现FactoryBean
。
仅供参考,使用factory-method
无效,因为我需要在创建对象之前设置属性。
这方面的一个典型示例是使用构建器来创建构建器,设置属性并调用构建方法以获取所需的最终bean。
答案 0 :(得分:2)
factory-bean 怎么样?例如:
<bean id="factory" class="package.Factory">
<!-- configure properties here -->
</bean>
<bean id="instance" factory-bean="instans" factory-method="createInstance"/>
Spring将创建Factory类的实例,配置它并使用它的 createInstance 方法来创建id为 instans 的bean。
答案 1 :(得分:1)
如果构建器的属性具有适当的Java Bean兼容set
方法,那么您可以分两个阶段完成
<bean id="fooBuilder" class="com.example.FooBuilder">
<property name="algorithm" value="simple" />
</bean>
<bean id="foo" factory-bean="fooBuilder" factory-method="build" />
但是对于像Guava CacheBuilder那样使用流畅的setter的东西,你可能最好使用Spring的JavaConfig approach来配置那部分配置而不是XML
@Configuration
public class AppConfig {
public @Bean Cache<String, MyObject> cache() {
return CacheBuilder.newBuilder()
.maximumSize(1000)
.softValues()
.build(cacheLoader);
}
// defined elsewhere, maybe in XML
private @Autowired CacheLoader<String, MyObject> cacheLoader;
}