Java Refactor 导致循环引用

标签 java refactoring dependency-injection

我在桌面应用程序中有这种代码

这只是一个包含按钮之类的 JPanel。

class ApplicationPanel {

   private Listener listener;

   public ApplicationPanel(){
      this.listener = new Listener(this);
   }
}

这会将事件添加到上面 JPanel 中的控件。

class Listener {

   private ApplicationPanel panel;

   public Listener(ApplicationPanel panel){
      this.panel = panel;
   }
}

调用者代码是这样的

public void main(String[] args){
   ApplicationPanel panel = new ApplicationPanel();
}

如果我尝试应用依赖注入(inject) 和工厂(稍后将更改为 Guice)

class ApplicationPanel {

   private Listener listener;

   public ApplicationPanel(){
      this(new Listener());
   }

   public ApplicationPanel(Listener listener){
      this.listener = listener;
   }
}

class Listener {

   private ApplicationPanel panel;

   public Listener(){
      this(new ApplicationPanel());
   }

   public Listener(ApplicationPanel panel){
      this.panel = panel;
   }
}

调用者代码是这样的 如您所见,此代码中存在循环依赖 解决此问题的最佳方法是什么?

public void main(String[] args){
   Listener listener = new Listener(panel);
   ApplicationPanel panel = new ApplicationPanel(listener);

}

最佳答案

查看 this blog post关于主题; guice 足够聪明,给定您在 guice 模块中提供的绑定(bind),可以检测循环引用,然后使用临时代理来解决注入(inject)问题。

关于Java Refactor 导致循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4124578/

相关文章:

Java Error 参数错误,但它们是正确的?

java - JDBC4Connection 中的内存泄漏

java - 像这样使用计时器的目的是什么?

jsf - 在 JSF 命名 bean 中注入(inject) Java 对象

asp.net-mvc-4 - 处理注入(inject)的 HttpClient

java - Java 容器内的容器

java - 使用代理设置 Firebase admin sdk (Java)

c# - 我如何找到从 C# 类方法调用的方法 - 而不是在运行时

sql-server - 从sql脚本创建mdf文件

javascript - 注入(inject)具有副作用的功能