打破循环依赖以便使用依赖注入

S1l*_*0rm 6 java dependency-injection dagger-2

我刚刚开始使用dagger 2并且之前没有使用任何其他依赖注入框架.现在我陷入了循环依赖,我不知道如何正确解决它.请考虑服务器应用程序中的以下示例,该应用程序将Reactor模式与Java NIO一起使用:

我有一个Handler对象附加到选择键,当新信息到达网络时执行该选择键:

class Handler implements Runnable {
  Server server;
  Client client;

  public void run {
    // static factory method that eventually calls a method on server, passing in 'client' as argument
    Command.parse(input).execute(server, client); 

  }

  public void send(String string) {
    // enqueu string and inform reactor about interest in sending
  }
}
Run Code Online (Sandbox Code Playgroud)

Client类包含有关连接的客户端的一些状态.所有连接的客户端都在Server类中.

class Client {
  Handler h;

  public send(String response) {
    h.send(response);          
  }
}
Run Code Online (Sandbox Code Playgroud)

当新输入到达时,处理程序创建Command对象,在服务器上执行它们,服务器最终将响应客户端.

所以我现在正在做的是Client手动创建一个对象Handler,传入一个this引用,以便能够发送响应:

client = new Client(this);
Run Code Online (Sandbox Code Playgroud)

所以现在我的问题是:设计有问题吗?是否有可能去耦ClientHandler?或者我应该忍受这个并且不使用依赖注入everywhere

我感谢你的建议

S1l*_*0rm 2

我意识到我真正想要解决的不是打破Client和之间的依赖关系Handler,而是使用依赖注入而不是new运算符。

我正在寻找的解决方案:将 a 注入ClientFactory到 的构造函数中Handler并使用clientFactory.create(this)它来创建一个Client对象。出色的AutoFactory库允许您通过简单的注释创建这样的工厂@AutoFactory。创建的类的构造函数会自动用 注释@Inject