我有一个 Controller ,它应该创建版本依赖实例(当前未实现)。
@Controller
public class ReportController {
@Autowired
private ReportCompFactory reportCompFactory;
public ModelAndView getReport() {
I_Report report = reportCompFactory.getObject();
^^^^^<- no autowiring in this instance
}
...
}
工厂看起来像这样:
@Component
public class ReportCompFactory implements FactoryBean<I_Report> {
@Override
public I_Report getObject() throws BeansException {
return new ReportComp();
}
@Override
public Class<?> getObjectType() {
return I_Report.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
未设置创建的实例字段(@Autowired 注释)。 我该怎么办,FactoryBean 是要实现的正确接口(interface)吗?
我更喜欢不涉及 xml 配置的解决方案。
组件本身:
ReportComp implements I_Report {
@Autowired
private ReportDao reportDao;
^^^^^^^<- not set after creation
...
}
}
最佳答案
如果您创建对象,Spring 不会执行 Autowiring 。这里有几个选项
- 将 bean 定义为范围
prototype
- 这将使工厂冗余(这适用于您只想在工厂中实例化的情况) - 在工厂中注入(inject)
ReportDao
,并通过setter将其设置到ReportComp
- 在工厂中注入(inject)
ApplicationContext
并执行ctx.getAutowireCapableBeanFactory().autowireBean(instance)
关于java - Autowiring 工厂创建实例的 spring 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6596655/