【问题标题】:Dependency Injection With Factory Methods工厂方法的依赖注入
【发布时间】:2013-05-23 07:10:55
【问题描述】:

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

谁能帮我理解如何正确地做到这一点。

【问题讨论】:

    标签: spring dependency-injection


    【解决方案1】:

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

    Have a look at the Spring documentation

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2012-08-09
        • 2018-08-18
        • 1970-01-01
        • 1970-01-01
        • 2020-03-18
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        相关资源
        最近更新 更多