gpt4 book ai didi

java - Guice 中的 MembersInjectors 是什么?

转载 作者:行者123 更新时间:2023-12-04 14:27:40 27 4
gpt4 key购买 nike

the official document ,可以看到这句话。

When binding to providers or writing extensions, you may want Guice to inject dependencies into an object that you construct yourself. To do this, add a dependency on a MembersInjector (where T is your object's type), and then call membersInjector.injectMembers(myNewObject).

我不明白如何使用 MembersInjector 的全貌。当您希望 Guice 将一些实例注入(inject)到您要创建的对象中时,最好只进行适当的绑定(bind)。那么,什么时候使用这个MemebersInjector呢?即使您想使用像 bind().toProvider() 这样的提供程序,为什么我们不需要使用 MembersInjector

谁能解释一下?

最佳答案

这里的关键词是“你构建自己”。

对于 bind(A.class).to(B.class) , Guice 创建了 B实例本身 并根据其 @Inject 注入(inject)它构造函数、方法和字段。但是,在某些情况下,您可能需要从 Guice 以外的地方获取实例。这可能是在构造函数可能不容易接受额外参数的情况下,如 Eclipse SWT ,或者在 Java serialization 中自动构建实例的地方, Google GSON , Apache Crunch ,或者在您无法控制的情况下创建实例的任何其他情况。

在那些情况下,而不是 getInstance(YourClass.class)getProvider(YourClass.class) ,您希望 Guice 在您已有的实例上执行它可以执行的所有注入(inject)。这是 MembersInjector 的地方进来:你可以注入(inject)一个MembersInjector<YourClass>无论你需要它,或者你可以使用 Injector.getMembersInjector 基于 Class 或 TypeLiteral 创建任意 MembersInjector。

关于java - Guice 中的 MembersInjectors 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42185065/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com