gpt4 book ai didi

java - 如何让 FactoryBean spring 创建的 bean 得到管理?

转载 作者:IT老高 更新时间:2023-10-28 13:44:13 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com