Java 如何使用GoogleGuice绑定类?

Java 如何使用GoogleGuice绑定类?,java,dependency-injection,guice,Java,Dependency Injection,Guice,我想使用第三方客户端API。我想创建ServiceClient实例并使用PostMessageAPI。我创建了两个类,ServiceClient和ServiceClientAPI。我应该如何绑定它?非常感谢 public class ServiceClient { @Provides @Singleton public ServiceClient provideServiceClient() { return new ServiceClientBuil

我想使用第三方客户端API。我想创建ServiceClient实例并使用PostMessageAPI。我创建了两个类,ServiceClient和ServiceClientAPI。我应该如何绑定它?非常感谢


public class ServiceClient {

    @Provides
    @Singleton
    public ServiceClient provideServiceClient() {
        return new ServiceClientBuilder()
                .withEndpoint()
                .withClient(ClientBuilder.newClient())
                .withSystem(SystemBuilder.standard().build())
                .build();
    }


看起来你在这里混合了一些概念

如果你有一个简单的项目。 我建议将客户端生成器移动到模块并删除ServiceClient类。 看起来您的ServiceClientAPI是一个包装器,所以不要将ServiceClient绑定到ServiceClientAPI。@Inject会帮你解决的,只要按原样绑定就行了

public class ServiceModule extends AbstractModule {

    @Override
    protected void configure() {
        bind(ServiceClientAPI.class);
    }

    @Provides
    @Singleton
    public ServiceClient provideServiceClient() {
        return new ServiceClientBuilder()
                .withEndpointFromAppConfig()
                .withClient(ClientBuilder.newClient())
                .withSystem(SystemBuilder.standard().build())
                .build();
    }
  
}
当涉及到更大的项目时,提供程序有一些逻辑inti,您可能希望在它们自己的类中使用提供程序。 在本例中,创建ServiceClientProvider

public class ServiceClientProvider implements Provider<ServiceClient> {


    @Override
    public ServiceClient get() {
       return new ServiceClientBuilder()
                .withEndpointFromAppConfig()
                .withClient(ClientBuilder.newClient())
                .withSystem(SystemBuilder.standard().build())
                .build();
    }
}
看 及

public class ServiceModule extends AbstractModule {

    @Override
    protected void configure() {
        bind(ServiceClientAPI.class);
    }

    @Provides
    @Singleton
    public ServiceClient provideServiceClient() {
        return new ServiceClientBuilder()
                .withEndpointFromAppConfig()
                .withClient(ClientBuilder.newClient())
                .withSystem(SystemBuilder.standard().build())
                .build();
    }
  
}
public class ServiceClientProvider implements Provider<ServiceClient> {


    @Override
    public ServiceClient get() {
       return new ServiceClientBuilder()
                .withEndpointFromAppConfig()
                .withClient(ClientBuilder.newClient())
                .withSystem(SystemBuilder.standard().build())
                .build();
    }
}
public class ServiceModuleWithProvider extends AbstractModule {
    @Override
    protected void configure() {
            bind(ServiceClientAPI.class);
    }

    @Override
    protected void configure() {
        bind(ServiceClient.class)
                .toProvider(ServiceClientProvider.class)
                .in(Singleton.class);
    }
}