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