java - 关于如何实例化类的问题(Javadoc 不清楚)
问题描述
我正在尝试 ScalarDB。不幸的是,Java 不是我的强项,所以我很挣扎。在这里的例子中
文档位于https://scalar-labs.github.io/scalardb/javadoc/
Q1: DistributedTransactionManager 是由
DistributedTransactionManager transaction = injector.getInstance(TransactionModule.class);
但是从文档中我看不到这两个类之间有任何关系,如何
TransactionModile.class
像这样分配。Q 2 看来我需要一个实例
DistributedTransactionManager
来启动事务。DistributedTransactionManager
是由 实现的接口TransactionService
。但是 的构造函数TransactionService
需要DistributedTransactionManager
. 这是如何解决的?不是循环的吗?
解决方案
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 的实例。
我知道对于春季用户来说,这将是一个有点混乱的概念。但这就是它的工作原理。
推荐阅读
- reactjs - 当我使用 useContext 挂钩时,为什么包裹在 forwardRef 中的功能组件会收到空引用?
- python - 如何在python中使用按位运算符?
- excel - 如何在 uipath 中使用动态调用 vba 更改 excel 中的行高
- python - 如何正确允许使用 Flask CORS 进行跨域请求?
- c++ - QT QQuickPaintedItem grabToImage() 就绪信号未一致调用
- fortigate - 在以 vip 作为目标创建 srcintf "any" 时发出 fortiOS
- c# - ASP.NET 剃须刀页面菜单
- python - “成熟构建”在 Windows 上失败
- swift - 应用程序试图以模态方式呈现活动控制器错误
- list - Flutter ListView 不会在 setState 上更新