作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
FactoryBean可用于以编程方式创建可能需要复杂实例化逻辑的对象。
但是,FactoryBean
创建的bean似乎没有成为spring管理的。这种解释正确吗?如果是这样,有什么好的解决方法吗?包含一个简短的代码示例来说明我的问题。
应用程序上下文:
<bean id="searcher" class="some.package.SearcherFactory" />
<bean id="service" class="some.package.Service" />
工厂实现:
public class SearcherFactory implements FactoryBean<Searcher> {
@Override
public Searcher getObject() throws Exception {
return new Searcher(); // not so complex after all ;)
}
@Override
public Class<Searcher> getObjectType() {
return Searcher.class;
}
....
}
工厂创建的类:
public class Searcher() {
private Service service;
@Autowired
public void setService(Service service) {
// never invoked
this.service=service;
}
}
最佳答案
这是一个抽象的 FactoryBean
实现,它为您 Autowiring :
public abstract class AbstractAutowiringFactoryBean<T> extends
AbstractFactoryBean<T> implements ApplicationContextAware{
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(
final ApplicationContext applicationContext){
this.applicationContext = applicationContext;
}
@Override
protected final T createInstance() throws Exception{
final T instance = doCreateInstance();
if(instance != null){
applicationContext
.getAutowireCapableBeanFactory()
.autowireBean(instance);
}
return instance;
}
/**
* Create the bean instance.
*
* @see #createInstance()
*/
protected abstract T doCreateInstance();
}
扩展它,实现 getObjectType()
和 doCreateInstance()
方法,你就可以使用 Autowiring 运行了。
注意:没有应用 BeanPostProcessors,这需要额外的代码。
关于java - 如何让 FactoryBean spring 创建的 bean 得到管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4970297/
我是一名优秀的程序员,十分优秀!