Guice injectMembers方法

9

我知道使用构造函数注入比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()??

1
你能给一个特定用例的代码示例吗? - M.L.
Guice已经做到了。你真的有问题吗? - jabbie
1个回答

14

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

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的setter方法应该标注为@Inject。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接