我正在浏览 google guice
,然后我想到它可能如何工作。
这就是我关于 property injector
可能如何工作的理论。
Guice
首先要我们创建一个 injector
并将所有 binding
信息传递给它。
Injector injector = Guice.createInjector(new BillingModule());
*来自 google guice page 的代码片段
好的,此时我可以认为有一个类包含binding
的所有信息。
当我们这样做的时候
injector.getInstance(RealBillingService.class);
我们来做这个技巧。
injector
将为真正的 RealBillingService
对象返回一个代理实例
,当我们调用一个
RealBillingService
对象的方法,代理实例
调用处理程序使用反射
根据注入(inject)器创建过程中传递的信息找出要注入(inject)的属性并填充它。
问题
我想这就是 guice
的工作方式。如果我错了,'Guice'
实现它的实际方式是什么?
如果这是 guice
的工作方式,那么 Guice
总是返回 proxy 对象
并且用户代码总是调用 代理对象
。这是真的吗?
我解释的图示
最佳答案
你的理解有点偏差。可以这样想:当您执行 Guice.createInjector(...)
时,就是 Guice 进行所有反射以找出什么取决于什么以及什么需要在哪里注入(inject)。当您执行 injector.getInstance(...)
时,Guice 不需要进行任何反射。它会立即创建 RealBillingService
,注入(inject)它的所有(传递性)依赖项,并返回它(不是代理)。
如果您使用 Guice 的 AOP 功能,那么这些对象将是代理,否则 Guice 不会返回代理。它只是调用 @Inject
构造函数,设置 @Inject
注释的字段,调用 @Inject
注释的方法,然后返回该对象。
编辑:另见 MiniGuice ,类 Guice 注入(inject)器的单类实现。
关于java - google guice 内部是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21655720/