2014-02-09 40 views
2

我正在浏览谷歌guice,然后我想到它是如何工作的。谷歌guice如何在内部工作

所以这是我的理论如何property injector可能工作。

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

OK

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

*代码片段在这一点上我能想到的,有与binding所有信息的类。

,当我们做

injector.getInstance(RealBillingService.class); 

在这里,我们做的伎俩。

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

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

搞清楚属性注入和fullfill它的基础上的在注射器创建过程中传递的信息。

问题

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

如果是这种方式guice工作,然后Guice总是返回proxy object和用户代码总是让在proxy objects通话。这是真的 ?我交代


图形表示

enter image description here

回答

9

你的理解是有点过。想想这样:当你做Guice.createInjector(...),这就是当Guice做了所有的反思,找出什么取决于什么和需要注入什么地方。当你做injector.getInstance(...)时,Guice不需要做任何反思。它创建了RealBillingService,然后注入其所有(传递)依赖关系,并返回(不是代理)。

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

编辑:也可参见MiniGuice,Guice-like注射器的单级实现。