google guice 内部如何工作

问题描述 投票:0回答:1

我正在浏览谷歌

guice
,然后我想到它可能是如何工作的。

所以这是我关于

property injector
如何发挥作用的理论。

Guice
首先要我们创建一个
injector
并将所有
binding
信息传递给它。

Injector injector = Guice.createInjector(new BillingModule());

*来自 google guice 页面的代码片段

好吧,此时我可以认为有一个类包含

binding
的所有信息。

当我们这样做时

injector.getInstance(RealBillingService.class);

我们就在这里发挥作用。

injector
将为真正的
proxy instance
对象返回一个
RealBillingService
,当我们调用

RealBillingService

对象的
方法,
proxy instance
调用处理程序使用
reflection

根据创建注入器期间传递的信息找出要注入的属性并填充它。

问题

这就是我想的,

guice
的工作方式。如果我错了,
'Guice'
实现它的实际方式是什么?

如果这是

guice
的工作方式,则
Guice
始终返回
proxy object
,并且用户代码始终调用
proxy objects
。这是真的吗?


我的解释的图示

enter image description here

java reflection dependency-injection guice
1个回答
12
投票

你的理解有点偏差。 可以这样想:当你执行

Guice.createInjector(...)
时,那就是 当 Guice 进行所有反射来找出什么依赖于什么以及什么需要注入到哪里。 当你这样做
injector.getInstance(...)
时,Guice 不需要做任何反射。 它立即创建
RealBillingService
,注入其所有(传递)依赖项,并返回该依赖项(不是代理)。

如果您使用 Guice 的 AOP 功能,那么这些对象将是代理,但否则 Guice 不会返回代理。 它只是调用

@Inject
构造函数,设置
@Inject
带注释的字段,调用
@Inject
带注释的方法,然后返回该对象。

编辑:另请参阅MiniGuice,类似 Guice 的注入器的单类实现。

© www.soinside.com 2019 - 2024. All rights reserved.