Java GoogleGuice如何在内部工作

Java GoogleGuice如何在内部工作,java,reflection,dependency-injection,guice,Java,Reflection,Dependency Injection,Guice,我正在浏览谷歌guice,然后我想它可能是如何工作的 这就是我关于属性注入器如何工作的理论 Guice首先希望我们创建一个injector,并将所有绑定信息传递给它 Injector injector = Guice.createInjector(new BillingModule()); *来自 好的,在这一点上,我可以认为有一个类包含了绑定的所有信息 当我们这样做的时候 injector.getInstance(RealBillingService.class); 在这里,我们做的把戏

我正在浏览谷歌
guice
,然后我想它可能是如何工作的

这就是我关于属性注入器如何工作的理论

Guice
首先希望我们创建一个
injector
,并将所有
绑定信息传递给它

Injector injector = Guice.createInjector(new BillingModule());
*来自

好的,在这一点上,我可以认为有一个类包含了
绑定的所有信息

当我们这样做的时候

injector.getInstance(RealBillingService.class);
在这里,我们做的把戏

injector
将在调用

RealBillingService
对象的方法,
代理实例
调用处理程序使用
反射

根据创建injector过程中传递的信息,找出要注入和填充的属性

问题

我想,
guice
就是这样工作的。如果我错了,那么
'Guice'
实现它的实际方法是什么

如果这是
guice
的工作方式,那么
guice
总是返回
代理对象
,并且用户代码总是调用
代理对象
。这是真的吗


关于我的解释的图示


你的理解有点偏差。可以这样想:当您执行
Guice.createInjector(…)
时,Guice会执行所有的反射,以确定哪些内容取决于哪些内容以及哪些内容需要在哪里进行注入。当您执行
injector.getInstance(…)
时,Guice不需要执行任何反射。它立即创建
RealBillingService
,注入其所有(可传递的)依赖项,并返回该依赖项(不是代理)

如果您使用Guice的AOP功能,那么这些对象将是代理,但Guice不会返回代理。它只需调用
@Inject
构造函数,设置
@Inject
-注释字段,调用
@Inject
-注释方法,并返回该对象

编辑:另请参见类似Guice的注入器的单个类实现