关于assisted injection的页面解释了如何通过使用@Assisted
在构造函数中注释某些参数来完成辅助注入,但它没有解释@AssistedInject
注释的用途以及它的区别来自@Inject
。这个注释是否与某种程度相关?有什么区别?
答案 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标记,或者它们必须是可注射的。