我正在使用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".
我不知道如何解决这个问题,从而寻求解决这个问题的方法。
答案 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以了解如何处理此问题。