Свойства класса Guice всегда нулевые; Фабрика никогда не называется / используется
Попытка внедрить объекты в классы, но не может заставить мою фабрику вызываться, не говоря уже об объекте в классе, в котором я хочу его видеть.
Фабричный класс должен возвращать экземпляр AmazonSQS.
public class AmazonFactory implements Provider<AmazonSQS> {
@Override
public AmazonSQS get() {
BasicAWSCredentials awsCreds = new BasicAWSCredentials("KEY", "SECRET");
return AmazonSQSClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.withRegion(Regions.US_EAST_2)
.build();
}
}
Насколько я понимаю, параметр, который принимает провайдер, должен возвращаться в get()
метод. Я думаю, что я сделал это правильно до сих пор.
Тогда у меня есть модуль
public class AmazonModule extends AbstractModule {
@Override
protected void configure() {
bind(AmazonSQS.class).toProvider(AmazonFactory.class);
}
}
Моя мысль здесь заключается в том, что всякий раз, когда я запрашиваю AmazonSQS, я на самом деле получаю результат фабрики (результат get()
метод?)
А потом я просто добавляю модуль в свое приложение в функции init (приложение Dropwizard использует guicy, поэтому немного по-другому, но это не должно иметь значения)
@Override
public void initialize(Bootstrap<SwordfishConfiguration> bootstrap) {
bootstrap.addBundle(GuiceBundle.builder()
.enableAutoConfig(getClass().getPackage().getName())
.useWebInstallers()
.modules(new BaseModule())
.build());
}
Специфика Dropwizard, работает так же, если я просто добавляю AmazonModule в метод init
public class BaseModule extends DropwizardAwareModule<Configuration> {
@Override
protected void configure() {
install(new AmazonModule());
configuration();
environment();
bootstrap();
}
}
я могу подтвердить AmazonModule
вызывается во время запуска приложения, поэтому часть инициализации пока права.
Однако, если я попытаюсь использовать AmazonSQS
объект это всегда ноль.
Пример:
public class QueueUtils {
@Inject
private AmazonSQS amazonSQS;
public QueueUtils() {
}
public void sendMessage(String queueUrl, String payload) {
amazonSQS.sendMessage(payload);
}
}
amazonSQS.sendMessage(payload);
потерпит неудачу как amazonSQS
нулевой.
Я только начал пытаться понять Guice, поэтому, если я пропустил какую-то основную концепцию или мое мышление совершенно неверно, мне бы хотелось, чтобы некоторые указатели указывали мне правильное направление.
Документация немного перегружена или очень сложна для переноса примеров в мое приложение.
ура