1 回答

TA贡献1856条经验 获得超17个赞
通过反射 Guice 分析了
MyApplication
的构造函数,发现它依赖于MessageService
(public MyApplication(MessageService service)
)。正是这个构造函数被采用,因为它被标记为@Inject
Guice 尝试找出此接口的绑定。在
AppInjector
您指定的实现MessageService
是EmailService
(bind(MessageService.class).to(EmailService.class);
)EmailService
通过Java 反射 API实例化。它是通过Class.newInstance
之后
EmailService
被创建,它是作为参数传递MyApplication.class.newInstance()
的工厂。
笔记:
默认情况下,如果您没有指定任何额外的构造函数,则有一个没有参数的默认构造函数,这就是为什么
EmailService
没有依赖项的原因。EmailService
实例是单例,因为它被标记为@Singleton
,所以如果对它有更多的依赖,就会注入完全相同的实例如果要创建到 instance 的绑定,可以使用以下代码:
bind(MessageService.class).toInstance(new EmailService());
Google 库在文档方面总是很丰富。我建议你通读这个维基:google/guice/wiki
添加回答
举报