Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
Dependency injection 使用Guice SPI以编程方式添加注入点_Dependency Injection_Guice - Fatal编程技术网

Dependency injection 使用Guice SPI以编程方式添加注入点

Dependency injection 使用Guice SPI以编程方式添加注入点,dependency-injection,guice,Dependency Injection,Guice,我从google guice spi中看到com.google.inject.spi.InjectionPoint 是否可以通过InjectionPoint类动态添加注入点 如果是,最好的做法是什么 这将允许在遗留代码上添加注入点代码 我想既然InjectionPoint是最后一个类,您就不能扩展它。无论如何,Java语言中任何可能的注入点都必须减少到静态/实例方法或字段或构造函数,因为这些都是类中可以与外部世界交互的部分。在您准确描述所需内容之前,不可能说得更多。在Guice中,注入点是通过@

我从google guice spi中看到com.google.inject.spi.InjectionPoint

是否可以通过InjectionPoint类动态添加注入点

如果是,最好的做法是什么


这将允许在遗留代码上添加注入点代码

我想既然
InjectionPoint
是最后一个类,您就不能扩展它。无论如何,Java语言中任何可能的注入点都必须减少到静态/实例方法或字段或构造函数,因为这些都是类中可以与外部世界交互的部分。在您准确描述所需内容之前,不可能说得更多。在Guice中,注入点是通过@Inject(jsr330或Guice)定义的。这是一种惯例,其他人可以使用其他系统来定义这些注入点。我们可以想象在简单的文本文件中写下这些注入点。我的问题是:从这个列表中,我可以在guice InjectionPoint中将它们转换为虚拟添加“@Inject”,并且在创建注入器时完全理解虚拟的“@Inject”。我的目标不是扩展InjectionPoint,而是简单地将它们用作SPI元素。希望我更清楚。不,你不是真的正确。注入点是更一般的概念,请参阅。绝对有可能注入到未由
@inject
注释的字段/构造函数中。例如,默认构造函数是一个注入点(即使它没有依赖注入者)。另一个例子是官方文档中的
@InjectLogger
注释。事实上,通过
TypeListener
s,您可以将依赖项注入到类提供的几乎任何字段/方法/构造函数中。所以,
@Inject
并不是注入点的定义。无论如何,我相信不可能轻松地钩住Guice类创建机制。基本上,Guice可以通过提供程序(它将对象创建委托给用户定义的提供程序,向提供程序中注入可能的依赖项)或通过构造函数创建对象,但这些构造函数必须使用
@Inject
进行注释,或者应该为所讨论的类提供显式的构造函数绑定。你可以浏览Guice代码,它非常容易阅读和调试。@VladimirMatveev提到的wiki的新链接是,旧的链接没有正确重定向