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

时间:2016-03-23 18:49:01

标签: deadbolt

我正在使用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".

我不知道如何解决这个问题,从而寻求解决这个问题的方法。

1 个答案:

答案 0 :(得分:1)

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以了解如何处理此问题。