Java 具有多个服务的Dagger组件
我需要使用Dagger实现Spring中的服务,但我无法这样做。考虑下面的例子。 这是其中一项服务Java 具有多个服务的Dagger组件,java,spring,spring-boot,dependency-injection,dagger-2,Java,Spring,Spring Boot,Dependency Injection,Dagger 2,我需要使用Dagger实现Spring中的服务,但我无法这样做。考虑下面的例子。 这是其中一项服务 public class Service1 { private final Repository1 repo1; @Inject public Service1(Repository1 repo1) { this.repo1 = repo1; } // implementation } 此服务的模块如下所示: @Module public
public class Service1 {
private final Repository1 repo1;
@Inject
public Service1(Repository1 repo1) {
this.repo1 = repo1;
}
// implementation
}
此服务的模块如下所示:
@Module
public class Service1Module {
@Provides
Repository1 provideRepository1(){
return Repository1Impl.getInstance();
}
@Provides
Service1 provideService1(){
return new Service1Impl(this.provideRepository1());
}
}
可以很容易地为该模块创建一个组件并使用它。简单易用
现在考虑另一个类
public class Service2 {
private final Repository2 repo2;
private final Service1 service1;
@Inject
public Service2(Repository2 repo2, Service1 service1) {
this.repo2 = repo2;
this.service1 = service1;
}
// implementation
}
我们把原来的类改为
public class Service1 {
private final Repository1 repo1;
private final Service2 service2;
@Inject
public Service1(Repository1 repo1, Service2 service2) {
this.repo1 = repo1;
this.service2 = service2;
}
// implementation
}
现在的问题是,我无法用这种方法创建适当的模块
再次考虑模块类
@Module
public class Service1Module {
@Provides
Repository1 provideRepository1(){
return Repository1Impl.getInstance();
}
@Provides
Repository2 provideRepository2(){
return Repository2Impl.getInstance();
}
@Provides
Service1 provideService1(){
return new Service1Impl(
this.provideRepository1(),
new Service2Impl(this.provideRepository2(), //this param
// needs service 1 which again needs service 2 and would
// be a loop);
}
}
只有两个服务在创建模块时在其内部形成循环。考虑具有相同服务的多个服务的系统。我不知道该怎么办。在Spring中,它很容易实现,但由于某些限制,我无法使用它。请帮忙
提前感谢。这是一个设计问题(代码气味),具有循环依赖关系(循环依赖关系)@Nkosi在春季可以自动连接任何需要的服务。与service1和service2一样,service1和service2可以相互自动连接并调用方法。如何使用匕首实现这一点?