线程“main”java.lang.nullpointerexception“中的异常,父类中有guice singleton

insrf1ej  于 2021-06-27  发布在  Java
关注(0)|答案(0)|浏览(253)

我需要一些关于guice注入的澄清,因为我花了几天时间试图理解它在我的特定环境中是如何工作的,但没有取得积极的结果。
我有一个基于dropwizard环境构建的java应用程序(不确定是否相关)。
入口点是创建guice注入器的经典main:

injector = Guice.createInjector(new MyAppModule(configuration, environment));

myappmodule是我将接口类绑定到实现的地方:

bind(EventService.class).to(MyEventServiceImpl.class).asEagerSingleton();

eventservice必须是一个托管的单例,它需要guice以防出现其他实现,目前我只有一个。
现在,我需要的注入应该发生在基类baseexception中,这里有以下代码:

public class BaseException extends RuntimeException {

    private final int statusCode;
    private final int errorCode;
    private final String errorDetails;

    @Inject
    private EventService eventService;

    public BaseException(int statusCode, int errorCode, String errorDetails) {
            this(statusCode, errorCode, null, errorDetails);
    }

    @Inject
    public BaseException(int statusCode, int errorCode, String errorMessage, String errorDetails) {
        super(errorMessage);
        this.statusCode = statusCode;
        this.errorCode = errorCode;
        this.errorDetails = errorDetails;
        // this.eventService = eventService // this would require parameter passing here and on all children classes?

        notifyEventService();
    }

    public void notifyEventService()
    {
        eventService.send(MyEnum.TYPE, super.getMessage());
    }
}

然后我有一个子类mycustomexception:

public class MyCustomException extends BaseException {

    public MyCustomException(int statusCode, int errorCode, String errorMessage, String errorDetails) {
        super(statusCode, errorCode, errorMessage, errorDetails);
    }
}

其思想是,在每个自定义异常时触发事件服务通知。问题是eventservice对象并没有真正被注入,我不知道这是一个设计问题,还是我对guice的误解。
当我试图抛出mycustomexception时,我得到一个 "Exception in thread "main" java.lang.NullPointerException" 相反。notifyeventservice()方法中的eventservice为空值。我尝试了几个@inject组合,但无法访问eventservice对象。
我对guice很陌生,但是我读了很多书,看了很多例子,我认为主要的想法是它可以神奇地获得在injector中创建的singleton示例,无论我尝试从哪个类访问它。这里的许多解决方案都涉及使用 injector.getInstance(EventService.class) 但我需要一个参考资料,它看起来很脏。在这一点上我愿意接受任何建议。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题