首页 > 解决方案 > 关于如何实例化类的问题(Javadoc 不清楚)

问题描述

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

https://github.com/indetail-blockchain/getting-started-with-scalardb#initialize-distributedtransactionmanager

文档位于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. 这是如何解决的?不是循环的吗?

标签: java

解决方案


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。这是如何解决的?不是循环的吗?

在这里,guice 再次不同。它使用即时绑定,它首先没有创建构造函数对象并注入参数,而且它还知道 DistributedTransactionManager 永远不会通过绑定成为 TransactionService 的实例。

我知道对于春季用户来说,这将是一个有点混乱的概念。但这就是它的工作原理。


推荐阅读