Guice类属性始终为null;永远不会调用/使用工厂

时间:2017-03-09 02:17:50

标签: java guice dropwizard

尝试将对象注入类中但似乎无法调用我的工厂,更不用说将对象放入我想要的类中了。

工厂类应返回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弄清楚,如果我错过了一些核心概念或者我的想法完全错误,我会喜欢一些指示让我朝着正确的方向前进。

文档有点压倒性或很难将示例传输到我的应用程序中。

干杯

0 个答案:

没有答案