MRa*_*ser 9 java dependency-injection guice
我想介绍Guice使用现有的中型项目.根据我的要求,我需要一个自定义范围(会话太大,而我的项目请求为小).
想象一下,我请求 guice为我提供一个A类实例,它与许多其他类(组合)有直接和间接的依赖关系.
我的自定义提供程序能够提供类的实例,这些类用作所有相关类的构造函数参数.
题:
@Inject在所有相关类的构造函数上放置一个(和我的自定义范围)注释,或者有一种方法,guice 只需要我请求的顶级类上的这些注释,并且所有其他依赖项都通过"询问"我的自定义范围是否为依赖类型的提供者?如果这是真的,这将增加引入Guice的努力,因为我必须调整超过1000个类.感谢guice介绍期间的任何帮助和经验.
Col*_*inD 13
首先,可以使用Guice而无需在@Inject任何地方添加注释.Guice支持Provider绑定,@ Provider 方法和构造函数绑定,所有这些都允许您绑定您选择的类型.但是,对于正常操作,它需要@Inject注释作为元数据,告诉它类需要哪些依赖项以及它可以注入它们的位置.
原因在于,否则,它无法确定地告诉它应该注入什么以及在哪里注入.例如,类可能有多个构造函数,而Guice需要某种方式来选择一个不依赖于任何猜测的注入.你可以说"好吧,我的类只有一个构造函数,因此它不需要@Inject",但是当有人向类中添加一个新的构造函数时会发生什么?然后Guice不再有决定和应用程序中断的基础.此外,这一切都假设您只是在进行构造函数注入.虽然构造函数注入肯定是一般的最佳选择,但Guice也允许注入方法(和字段),并且需要明确指定类的注入点的问题更强,因为大多数类将有许多方法不是用于注射,最多只有少数.
除了@Inject告诉Guice的重要性之外,它还可以作为如何使用类的文档 - 该类是应用程序依赖注入有线基础结构的一部分.它还有助于在您的类中应用注释时保持一致@Inject,即使对于仅使用单个构造函数的某些人来说当前也不是绝对必要的.我还要注意,@javax.inject.Inject如果标准Java注释比Guice特定的注释更适合您,可以在Guice 3.0中使用JSR-330的注释.
通过询问提供者的范围,我不太清楚你的意思.范围通常不会自己创建对象; 它们控制何时向未作用域的提供者询问新实例的依赖关系以及如何控制该实例的范围.当然,提供商是他们运营方式的一部分,但我不确定这是不是你的意思.如果您有一些提供对象实例的自定义方法,那么Provider绑定和@Provides方法就是这样做的,并且不需要@Inject对类本身进行注释.