首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是FactoryModuleBuilder,@AssistedInject和“AssistedInject”?

什么是FactoryModuleBuilder,@AssistedInject和“AssistedInject”?
EN

Stack Overflow用户
提问于 2015-04-10 07:28:32
回答 2查看 1.9K关注 0票数 11

弹簧框架FactoryModuleBuilder@AssistedInject@AssistedGoogle Guice中的等价性是什么?换句话说,使用Spring创建工厂对象的推荐方法是什么,其方法接受应用程序(而不是容器)必须提供的参数?

Spring方法与FactoryModuleBuilder不一样。FactoryModuleBuilder构建一个Guice模块,该模块生成实现工厂方法模式的“工厂”。与Spring静态工厂方法不同,这些工厂对象的方法是实例方法,而不是静态方法。静态工厂方法的问题在于它是静态的,没有实现接口,因此不能用另一个工厂实现来替换它。但是,不同的FactoryModuleBuilder实例可以构建实现相同接口的不同工厂。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-10 22:47:09

Spring并不等同于Guice FactoryModuleBuilder。最接近的等价物是Spring类,它提供了一个工厂bean,它实现了一个工厂接口,其方法接受来自应用程序的任意参数。Spring容器可以将依赖项注入到@Configuration对象中,然后它可以提供给工厂构造函数。与FactoryModuleBuilder不同,Spring方法产生了许多典型工厂实现的样板代码。

示例:

代码语言:javascript
复制
public class Vehicle {
}

public class Car extends Vehicle {
    private final int numberOfPassengers;

    public Car(int numberOfPassengers) {
        this.numberOfPassengers = numberOfPassengers;
    } 
}

public interface VehicleFactory {
    Vehicle createPassengerVehicle(int numberOfPassengers);
}

@Configuration
public class CarFactoryConfiguration {
    @Bean
    VehicleFactory carFactory() {
        return new VehicleFactory() {
            @Override
            Vehicle createPassengerVehicle(int numberOfPassengers) {
                return new Car(numberOfPassengers);
            }
        };
    }
}
票数 5
EN

Stack Overflow用户

发布于 2015-04-10 20:42:41

我不完全确定这个问题是否是个骗局(只有90%的把握),但这个答案:

https://stackoverflow.com/a/13243066/1768232

似乎有你需要的信息。具体来说,你应该这样做:

我是通过从上下文中获取构造函数-arg中使用的bean的一个实例,然后用运行时使用的值填充它来工作的。然后,当您获得工厂生成的bean时,这个bean将被用作参数。

代码语言:javascript
复制
public class X {
   public void callFactoryAndGetNewInstance() {
      User user = context.getBean("user");
      user.setSomethingUsefull(...);
      FileValidator validator = (FileValidator)context.getBean("fileValidator");
      ...
   }
}

我建议阅读整个答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29555705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档