我正在浏览谷歌
guice
,然后我想到它可能是如何工作的。
所以这是我关于
property injector
如何发挥作用的理论。
Guice
首先要我们创建一个injector
并将所有binding
信息传递给它。
Injector injector = Guice.createInjector(new BillingModule());
好吧,此时我可以认为有一个类包含
binding
的所有信息。
当我们这样做时
injector.getInstance(RealBillingService.class);
我们就在这里发挥作用。
injector
将为真正的 proxy instance
对象返回一个 RealBillingService
,当我们调用 时
RealBillingService
对象的方法,
proxy instance
调用处理程序使用reflection
来
根据创建注入器期间传递的信息找出要注入的属性并填充它。
问题
这就是我想的,
guice
的工作方式。如果我错了,'Guice'
实现它的实际方式是什么?
如果这是
guice
的工作方式,则 Guice
始终返回 proxy object
,并且用户代码始终调用 proxy objects
。这是真的吗?
我的解释的图示
你的理解有点偏差。 可以这样想:当你执行
Guice.createInjector(...)
时,那就是 当 Guice 进行所有反射来找出什么依赖于什么以及什么需要注入到哪里。 当你这样做 injector.getInstance(...)
时,Guice 不需要做任何反射。 它立即创建 RealBillingService
,注入其所有(传递)依赖项,并返回该依赖项(不是代理)。
如果您使用 Guice 的 AOP 功能,那么这些对象将是代理,但否则 Guice 不会返回代理。 它只是调用
@Inject
构造函数,设置 @Inject
带注释的字段,调用 @Inject
带注释的方法,然后返回该对象。
编辑:另请参阅MiniGuice,类似 Guice 的注入器的单类实现。