Google Guice是一个依赖注入库,它允许您通过声明对象之间的关系来构造对象。对象是在需要它们来构造其他对象时构造的。您还可以通过配置Guice来实现抽象类或具有不同实现的接口,这使得它对于运行或测试代码非常有用。 @Inject注解了构造函数和方法,它们决定了对象需要初始化什么,还有很多其他注解决定了Guice的工作方式,但是仅仅注解对象是不够的;您还必须使用Guice bindings配置它们。 下面是一个非常简单的例子(来自我的一个应用程序):我有一个MySQLDataTracker,它需要一个MysqlConnectionPoolDataSource:
public class MySQLDataTracker extends ExperimentDataTracker {
@Inject
public MySQLDataTracker(MysqlConnectionPoolDataSource ds) {
....
}
}
1条答案
按热度按时间8ehkhllq1#
Google Guice是一个依赖注入库,它允许您通过声明对象之间的关系来构造对象。对象是在需要它们来构造其他对象时构造的。您还可以通过配置Guice来实现抽象类或具有不同实现的接口,这使得它对于运行或测试代码非常有用。
@Inject
注解了构造函数和方法,它们决定了对象需要初始化什么,还有很多其他注解决定了Guice的工作方式,但是仅仅注解对象是不够的;您还必须使用Guice bindings配置它们。下面是一个非常简单的例子(来自我的一个应用程序):我有一个
MySQLDataTracker
,它需要一个MysqlConnectionPoolDataSource
:注意,
MySQLDataTracker
扩展了ExperimentDataTracker
,ExperimentDataTracker
是一个抽象类,可以通过多种方式实现。这声明了每当我需要一个
ExperimentDataTracker
时,就会构造一个MySQLDataTracker
,我还需要确保构造它所必需的对象是可用的,所以我声明了一个provider:这意味着应该只有一个连接池数据源,也意味着当我尝试获取
ExperimentDataTracker
的示例时,Guice拥有构造它所需的一切,如果我没有以上这些,它将抛出一个错误。然而,Guice并没有就此止步。其他事情依赖于
ExperimentDataTracker
,因此它又被用来注入其他对象。在我的代码的顶层,实际上只有一个对getInstance
的调用,这使得Guice构造了几乎所有的东西。我不必在任何地方编写new
语句。我是Guice的忠实粉丝,因为它减少了我初始化一堆对象以初始化其他对象的需要。基本上,我只需要请求我想要的对象,噗!它就出现了。