0

我对 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 当前正在创建中:是否存在无法解析的循环引用?

有人可以帮助我理解如何正确地做到这一点。

4

2 回答 2

0

如果我理解正确,那么您正在尝试通过命令手动实例化工厂。但是当您尝试在 ApplicationContext 中使用它们时,Spring 框架必须注册 bean。您必须创建一个工厂 Bean,它提供了其他常见对象的创建。这些对象也必须注册到应用程序的 Spring 配置中。

查看 Spring 文档

这意味着您必须在您的应用程序 bean 的某个地方定义以下类型:XServer、YServer 和您的工厂 Bean 的类型。此外,您应该查看Method Injection,因为您正在尝试创建具有不同范围的 bean。

于 2013-05-23T08:16:39.700 回答
0

我遇到过类似的问题,但发现这个问题很有帮助:Inject spring dependency in abstract super class。它不完全相同,但它处理继承点。请注意,它使用的是 XML 而不是注释。

于 2014-12-10T16:57:37.627 回答