工厂方法的依赖注入

时间:2013-05-23 07:10:56

标签: spring dependency-injection

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

有人可以帮助我了解如何纠正错误。

2 个答案:

答案 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而不是注释。