关于如何实例化类的问题(Javadoc中不清楚)



我正在试用ScalarDB。不幸的是,Java不是我的强项,所以我很挣扎。在这里的例子中

https://github.com/indetail-blockchain/getting-started-with-scalardb#initialize-分布式事务管理器

文档位于https://scalar-labs.github.io/scalardb/javadoc/

  1. Q1:DistributedTransactionManager由创建

    DistributedTransactionManager transaction = injector.getInstance(TransactionModule.class);

    但是TransactionModile.class怎么能这样分配呢?从文档中我看不出这两个类之间有任何关系。

  2. Q 2我似乎需要一个DistributedTransactionManager的实例来启动事务。DistributedTransactionManager是由TransactionService实现的接口。但TransactionService的构造函数以DistributedTransactionManager为例。这是如何解决的?它不是循环的吗?

请参阅入门文档。

https://github.com/scalar-labs/scalardb/blob/master/docs/getting-started.md#store--使用事务服务检索数据

正如它所说,这是开始交易的方式。

Injector injector = Guice.createInjector(new TransactionModule(new DatabaseConfig(props)));
TransactionService service = injector.getInstance(TransactionService.class);
DistributedTransaction tx = service.start();

Q1。我看不出这两个班之间有任何关系。

这就是Guice的工作原理。在xxxModule中,将定义类绑定,并用这些绑定替换变量。例如,在您的案例中,TransactionModule有一个配置方法,其中绑定被定义为

@Override
protected void configure() {
bind(DistributedTransactionManager.class).to(ConsensusCommitManager.class).in(Singleton.class);
bind(DistributedStorage.class).to(config.getStorageClass()).in(Singleton.class);
}

因此,如果将getInstace(TransactionModule(分配给DistributedTransactionManager,则ConsensusCommitManager的实例将被替换。

Q2.这是如何解决的?它不是循环的吗?

这里的指南又不一样了。它使用即时绑定,首先不创建构造函数对象并注入参数,而且它还了解DistributedTransactionManager永远不会通过绑定成为TransactionService的实例。

我知道对于spring用户来说,这将是一个有点令人困惑的概念。但它就是这样运作的。

最新更新