谷歌guice如何在内部工作

Bhu*_*van 3 java reflection dependency-injection guice

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

所以这是关于如何property injector运作的理论.

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

Injector injector = Guice.createInjector(new BillingModule());
Run Code Online (Sandbox Code Playgroud)

*谷歌guice页面的代码片段

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

当我们这样做的时候

injector.getInstance(RealBillingService.class);
Run Code Online (Sandbox Code Playgroud)

我们在这里诀窍.

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

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

根据在创建注入器期间传递的信息,确定要注入和填充的属性.

这就是我认为的guice工作方式.如果我错了,'Guice'实现它的实际方式是什么?

如果这是guice工作方式,那么Guice总是返回proxy object,用户代码总是调用proxy objects.这是真的 ?


我的解释图示

在此输入图像描述

Tav*_*nes 9

你的理解有点不对劲.想想这样说:当你这样做Guice.createInjector(...),这是当吉斯做所有的反射找出要看什么,哪些需要得到地方注射.当你这样做时injector.getInstance(...),Guice不需要做任何反思.它创建了RealBillingService正确的权限,注入了所有(传递)依赖项,并返回(不是代理).

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

编辑:另请参阅MiniGuice,这是Guice类喷射器的单一类实现.