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的注入器的单个类实现