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 以了解如何处理此问题。
我使用的是 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 以了解如何处理此问题。