Решение довольно сложное, у меня с примером работало следующее:
lombok 1.8.4 Guice 4.2.2
Вы должны создать свою собственную аннотацию и заменить на нее аннотацию @Namedсм. BindingAnnotations
например,
package org.company.PSSNS
import com.google.inject.BindingAnnotation;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@BindingAnnotation
@Target({PARAMETER,METHOD,FIELD})
@Retention(RUNTIME)
public @interface PSSNS {}
Затем добавьте файл lombok.config, см. здесь
в файле добавьте следующую строку
lombok.copyableAnnotations += org.company.PSSNS
в вашем классе
@RequiredArgsConstructor(access = AccessLevel.PUBLIC, onConstructor = @__(@Inject))
public class SNSAccessor {
@PSSNS
private final AmazonSNS snsClient;
private static final String COLON = ":";
private static final short ARN_LENGTH = 6;
Замените его и в модуле Guice
public class SNSModule extends AbstractModule {
@Provides
@Singleton
@PSSNS
public AmazonSNS getPSSNS(
@NonNull @Named("PaymentSuccessSNSRegionName") final Regions region,
final Config config) {
return AmazonSNSClientBuilder.standard()
.withCredentials(new AWSCredentialsProviderImpl(config.getSnsMaterialSet()))
.withRegion(region)
.build();
}
}
Когда я проверял, что мне нужно очистить сборку от maven
Посмотрите на сгенерированный класс и убедитесь, что вы видите его в конструкторе.
Это должно позволить Guice ввести все аргументы вашего конструктора.