[英]Guice: Creating objects by methods
假设我有两个相似(但不同)的方法(或可能是静态方法) create_x()
和create_y()
来创建对象(分别是派生类) Parser
类的对象(分别称为x
和y
)。
现在,我想绑定由这两种方法创建的对象,就像回答我的上一个问题一样 :
bind(Parser.class)
.annotatedWith(Names.named("x"))
.to(ParserXImplementation.class);
bind(Parser.class)
.annotatedWith(Names.named("y"))
.to(ParserYImplementation.class);
但是使用由create_x()
和create_y()
创建的对象,而不是ParserXImplementation
类, ParserYImplementation
类的实例。 (因此,不必创建类ParserXImplementation
, ParserYImplementation
。)
请注意,我希望对象是单例。
如果create_x()
和create_y()
是静态方法,并且它们是实例方法,我都希望得到答案。 如果它们是实例方法,则包含它们的类本身可能会进行依赖注入。
这个怎么做? (将依赖项注入由方法创建的实例)
从https://github.com/google/guice/wiki/ProvidesMethods :
需要代码创建对象时,请使用@Provides
方法。 该方法必须在模块中定义,并且必须具有@Provides
批注。 该方法的返回类型是绑定类型。 只要注入器需要该类型的实例,它将调用该方法。
public class BillingModule extends AbstractModule {
@Override
protected void configure() {
...
}
@Provides
TransactionLog provideTransactionLog() {
DatabaseTransactionLog transactionLog = new DatabaseTransactionLog();
transactionLog.setJdbcUrl("jdbc:mysql://localhost/pizza");
transactionLog.setThreadPoolSize(30);
return transactionLog;
}
}
此外,它说它可以使用@Named("x")
和@Named("y")
类的注释来区分x
和y
,如对两次绑定同一接口(Guice)的回答中所述 。
这就是我所需要的(但是方法是在模块内部而不是在任意类中定义的)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.