@Inject和@AssistedInjected之间的区别?

时间:2013-03-12 00:48:04

标签: guice guice-3

关于assisted injection的页面解释了如何通过使用@Assisted在构造函数中注释某些参数来完成辅助注入,但它没有解释@AssistedInject注释的用途以及它的区别来自@Inject。这个注释是否与某种程度相关?有什么区别?

2 个答案:

答案 0 :(得分:3)

@Inject@AssistedInject都用于注释应该使用正在使用的Guice模块的注入器调用的构造函数。

唯一的区别是,当工厂只有一个方法来创建类型时使用@Inject,而当工厂有多个这样的方法对应于该类型的多个构造函数时,使用@AssistedInject。更有必要帮助Guice区分这两种情况。

答案 1 :(得分:2)

来自http://google-guice.googlecode.com/git/javadoc/com/google/inject/assistedinject/AssistedInject.html

  

与FactoryModuleBuilder配合使用时,构造函数将被注释   使用@AssistedInject表示可以有多个构造函数   注入,每个都有不同的参数。 AssistedInject注释   不应与@Inject注释混合使用。辅助参数   必须与工厂内的一个相应工厂方法完全匹配   接口,但参数不需要是相同的顺序。   用AssistedInject注释的构造函数由Guice和   获得所有好处(如AOP)。

     

过时用法:与FactoryProvider,构造函数一起使用时   使用@AssistedInject注释会触发“向后兼容性”   模式“。辅助参数必须完全匹配一个对应的参数   工厂界面内的工厂方法都必须在   与工厂中列出的订单相同。在这种向后兼容   模式,使用AssistedInject注释的构造函数不是由   Guice并没有获得任何好处。

     

构造函数参数必须由工厂提供   界面并用@Assisted标记,或者它们必须是可注射的。

相关问题