0

我正在使用 deadbolt 2.5.0,并且我创建了自定义 SubjectPresentHandler,如下所示:

public class SubjectPresentHandler extends AbstractDeadboltHandler
{
    public SubjectPresentHandler(ExecutionContextProvider ecProvider) {
        super(ecProvider);
    }
    // other required methods
}

而且,我还有:

@Singleton
public class CustomDeadboltHandlerCache implements HandlerCache
{
    private final DeadboltHandler defaultHandler = new  SubjectPresentHandler();
   // other required code
}

现在我在这里面临的问题是我无法使用其默认构造函数实例化 SubjectPresentHandler。我收到错误消息:“构造函数 SubjectPresentHandler 未定义”。现在,当我在 SubjectPresentHandler 中添加默认构造函数时,如下所示:

public SubjectPresentHandler() {
   super();
}

我收到一个错误:构造函数 AbstractDeadboltHandler 未定义。如果我尝试删除 SubjectPresentHandler 中的参数化构造函数,则会收到错误消息

"Implicit super constructor AbstractDeadboltHandler() is undefined for default constructor. Must define an explicit constructor".

我不确定如何解决此问题,因此寻求有关此问题的解决方案。

4

1 回答 1

1

的构造函数SubjectPresentHandler接受一个ExecutionContextProvider作为参数。最简单的方法是注入一个并通过 Guice 创建处理程序。

ExecutionContextProvider 由提供DeadboltModule- 你可以在这里看到。

@Singleton
public class SubjectPresentHandler extends AbstractDeadboltHandler
{
    @Inject
    public SubjectPresentHandler(ExecutionContextProvider ecProvider) {
        super(ecProvider);
    }
    // other required methods
}

您还可以将处理程序注入处理程序缓存:

@Singleton
public class CustomDeadboltHandlerCache implements HandlerCache
{
    private final DeadboltHandler defaultHandler;

    @Inject
    public CustomDeadboltHandlerCache(final DeadboltHandler defaultHandler) {
        this.defaultHandler = defaultHandler;
    }
   // other required code
}

如果您有多个处理程序,请查看文档以了解如何处理。

于 2016-03-24T18:36:41.600 回答