问题描述
可用于以编程方式创建可能需要复杂实例化逻辑的对象。
The FactoryBean can be used to programmatically create objects which might require complex instantiation logic.
但是,似乎 FactoryBean
创建的 bean 不会变成春天管理。这种解释是否正确?如果是这样,有什么好的解决方法吗?包含一个简短的代码示例来说明我的问题。
However, it seems that the beans created by the FactoryBean
doesn't become spring managed. Is this interpretation correct? If so, are there any nice workarounds? A short code sample is included to illustrate my problem.
ApplicationContext:
ApplicationContext:
<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
创建的对象由管理,但不由Spring实例化或配置。通过使用 FactoryBean
,您自己负责。所有注入和配置必须由 FactoryBean
The object created by the FactoryBean
are managed by Spring, but not instantiated or configured by Spring. By using a FactoryBean
, you take responsibility for that yourself. All injection and config must be handled by the FactoryBean
处理。有一种替代方案可能更适合您 - 使用。这意味着您可以在Java中使用复杂的实例化逻辑,同时仍然在对象本身上使用 @Autowired
之类的东西。
There is an alternative which may work better for you - use annotation-based config instead of XML-based config. This means you can have complex instantiation logic in Java, whilst still using things like @Autowired
on the objects themselves.
我现在倾向于为所有非平凡的Spring应用程序使用注释样式配置,它使许多事情变得更容易。
I tend to use annotation-style config for all non-trivial Spring apps now, it makes many things a lot easier.
这篇关于如何获得由FactoryBean spring创建的bean?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!