我对Spring很新,我正试图将我们的遗留代码移到spring。我正在尝试使用@Autowired自动注入所有依赖项。
我的Bean有一个工厂方法如下:
public static Service getInstance(Registration registration) throws Exception {
Service service = null;
switch(registration.getType()) {
case XServer :
service = new XServer(); break;
case YServer :
service = new YServer(); break;
default :
service = new XServer(); break;
}
service.setRegistration(registration);
return service;
}
但是当我在工厂方法中使用 new 时,新类中的所有依赖项仍然未初始化。此外,如果我使用 appContext.getBean('beanname'),则会引发以下异常:
目前正在创建请求的bean:是否存在无法解析的循环引用?
有人可以帮助我了解如何纠正错误。
答案 0 :(得分:0)
如果我理解正确,那么您正尝试通过 new 命令手动实例化工厂。但是当您尝试在ApplicationContext中使用它们时,Spring框架必须注册bean。您必须创建一个Factory Bean,它可以创建常见的其他对象。这些对象也必须注册到 应用程序的Spring配置。
Have a look at the Spring documentation
这意味着您必须在以下类型的应用程序bean中定义某个位置:XServer,YServer和Factory Bean的类型。此外,您应该查看Method Injection,因为您正在尝试创建具有不同范围的bean。
答案 1 :(得分:0)
我遇到了类似的问题,但发现此问题很有用:Inject spring dependency in abstract super class。 它不完全相同,但它处理继承点。请注意,它使用的是XML而不是注释。