如果只注入直接依赖关系,如何防止Google Guice中的循环引用

How to prevent circular references in Google Guice if you inject only direct dependencies

Google Guice的最佳做法是仅注入直接依赖关系 。 但是,如果我使用下面的示例代码,我如何在类Customer中创建帐户的实例?

@Provides 
Account providePurchasingAccount(Customer customer) { 
  return customer.getPurchasingAccount();
}

问题是,Guice总是通过调用providePurchasingAccount()来获得一个新的Account ,这会导致循环引用。

问题作者:max-schmidt
采纳答案:

您摘录的方法在CustomersModule类中,而不是Customer。

这里有更多的细节。

这取决于客户如何绑定。

在Guice wiki页面中提到它并不显示客户的绑定。

想象一下这个模块也有这个方法。

@Provides
Customer getCustomer(Database database, long customerId) {
  return database.getCustomer(customerId);
}

在这种情况下,当首先注入Account时,会调用此方法来获取Customer对象,然后调用providePurchasingAccount来获取Account。

答案作者:chadum

参考更多解答:How to prevent circular references in Google Guice if you inject only direct dependencies,转载请保留如果只注入直接依赖关系,如何防止Google Guice中的循环引用

更多:guice