【问题标题】:Guice injectMembers methodGuice injectMembers 方法
【发布时间】:2011-02-25 10:57:54
【问题描述】:

我了解使用构造函数注入优于 setter 注入的好处,但在某些情况下,我必须坚持仅使用基于 setter 的注入。

我的问题是如何使用 injector.injectMembers() 方法注入所有基于 setter 的注入类的成员?

//I am calling this method in init method of my application
private static final Injector injector = Guice.createInjector(new A(), new B());

//Injecting dependencies using setters of all classes bound in modules A and B
injector.injectAllMembers()??

【问题讨论】:

  • 你能给出一个特定用例的代码示例吗?
  • Guice 已经做到了。你真的有问题吗?

标签: guice


【解决方案1】:

为什么需要手动注入依赖?

Guice 自动将依赖项注入到字段和方法中。 使用:

YourClass yourClass = injector.getInstance(YourClass.class);

Guice 文档:

每当 Guice 创建一个实例时,它 自动执行此注入 (在第一次执行构造函数之后 注射),所以如果你能让 Guice 为您创建所有对象, 你永远不需要使用这种方法。

您只需要自己将成员注入到手动创建的实例中,如下所示:

YourClass yourClass = new YourClass();
injector.injectMembers(yourClass);

或者你可以使用类似的东西:

public class YourClassProvider implements Provider<YourClass> {

    private final Injector injector;

    @Inject
    public YourClassProvider(Injector injector) {
        this.injector = injector;
    }

    public YourClass get() {

        YourClass yourClass = new YourClass();
        injector.injectMembers(yourClass);

        return yourClass;
    }
}

在任何情况下,YourClass 的设置器都应该使用@Inject 进行注释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2015-03-27
    • 1970-01-01
    相关资源
    最近更新 更多