尝试将对象注入类中但似乎无法调用我的工厂,更不用说将对象放入我想要的类中了。
工厂类应返回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();
}
}
我的理解是Provider所采用的参数应该是get()
方法中应该返回的参数。我想到目前为止我已经做到了这一点。
然后我有一个模块
public class AmazonModule extends AbstractModule {
@Override
protected void configure() {
bind(AmazonSQS.class).toProvider(AmazonFactory.class);
}
}
我的想法是,无论何时我请求AmazonSQS,我都应该获得工厂的结果(get()
方法的结果?)
然后我只是在init函数中将模块添加到我的应用程序(使用guicy的Dropwizard应用程序,所以有点不同,但不应该重要)
@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();
}
}
我可以确认在app启动期间正在调用AmazonModule
,因此init部分到目前为止是正确的。
但是,如果我尝试使用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弄清楚,如果我错过了一些核心概念或者我的想法完全错误,我会喜欢一些指示让我朝着正确的方向前进。
文档有点压倒性或很难将示例传输到我的应用程序中。
干杯