Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Guice中的MembersInjectors是什么?_Java_Dependency Injection_Guice - Fatal编程技术网

Java Guice中的MembersInjectors是什么?

Java Guice中的MembersInjectors是什么?,java,dependency-injection,guice,Java,Dependency Injection,Guice,在中,你可以看到这个句子 当绑定到提供程序或编写扩展时,您可能希望Guice将依赖项注入到您自己构造的对象中。为此,在MembersInjector上添加依赖项(其中T是对象的类型),然后调用MembersInjector.injectMembers(myNewObject) 我不完全理解如何使用MembersInjector。 当您希望Guice将一些实例注入到要创建的对象中时,最好只进行适当的绑定。那么,您什么时候使用这个MemebersInjector? 即使您想使用像bind().toP

在中,你可以看到这个句子

当绑定到提供程序或编写扩展时,您可能希望Guice将依赖项注入到您自己构造的对象中。为此,在MembersInjector上添加依赖项(其中T是对象的类型),然后调用MembersInjector.injectMembers(myNewObject)

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

有人能解释一下吗?

这里的关键词是“你构造了你自己”

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


在这些情况下,您希望Guice在已有的实例上执行所有注入,而不是
getInstance(YourClass.class)
getProvider(YourClass.class)
。这就是问题所在:您可以在任何需要的地方注入
MembersInjector
,也可以基于类或TypeLiteral创建任意MembersInjector。

谢谢,这是一个非常有用的答案。但是,您提到的方法,
getInstance(YourClass.class)
getProvider(YourClass.class)
,都是Guice的方法?是的,这些是Injector上的方法,相当于在图形中注入
T
Provider