Внедрение объекта, который использует шаблон строителя внутри конструктора пружины - PullRequest
0 голосов
/ 24 марта 2020

Я видел, что этот вопрос часто задавался здесь, но ни один из ответов не помог мне в моей ситуации.

Я использую square sdk , который побуждает меня создать клиенту, как это, перед его использованием.

import com.squareup.square.SquareClient;
import com.squareup.square.Environment;

SquareClient square = new SquareClient.Builder()
    .environment(Environment.SANDBOX)
    .accessToken("YOUR_SANDBOX_ACCESS_TOKEN")
    .build();

Учитывая, что сервис выглядит примерно так, Spring не сможет найти требуемый компонент . И выдаст ошибку вроде:

Нет квалифицирующего компонента типа 'squareClient'

Поэтому у меня есть вопрос, как загрузить два параметра в сервис с использованием инъекции зависимостей , чтобы сделать квадратный сервис тестируемым.

@Service
public class SquareService {
    private final SquareClient squareClient;

    public SquareService(SquareClient squareClient) {
        this.squareClient = squareClient;
    }
}

И мой тест у меня

@Before
public void setup() {
    sut = new SquareService(new SquareClient.Builder()
    .environment(Environment.SANDBOX)
    .accessToken("YOUR_SANDBOX_ACCESS_TOKEN")
    .build());
}

1 Ответ

0 голосов
/ 25 марта 2020

Вы можете создать класс @Configuration и создать компонент вручную:

@Configuration
public class SquareConfiguration {

  @Value("${my.config.sandboxAccessToken}")
  private String sandboxAccessToken;

  @Bean
  public SquareService createSquareService(){
    return new SquareService(new SquareClient.Builder()
      .environment(Environment.SANDBOX)
      .accessToken(this.sandboxAccessToken)
      .build());
  }
}
...