Deadbolt 2.5.0,无法实例化扩展 AbstractDeadboltHandler 的自定义 SubjectPresentHandler

Deadbolt 2.5.0, unable to instantiate custom SubjectPresentHandler extending AbstractDeadboltHandler

我使用的是 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。我得到一个错误:"The constructor SubjectPresentHandler is undefined"。现在,当我在 SubjectPresentHandler 中添加默认构造函数时,如下所示:

public SubjectPresentHandler() {
   super();
}

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

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

我不知道如何解决这个问题,因此寻求有关此问题的解决方案。

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

ExecutionContextProvider 由 DeadboltModule 提供 - 你可以看到这个 here.

@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
}

如果您有多个处理程序,请查看 the documentation 以了解如何处理此问题。