在我的 Play 2 应用程序中,我需要在由 Guice 实例化的类中创建一个类标记(作为一个急切的单例;这是一个要求)。
case class UserCreated(id: Long, userName: String) extends ApplicationEvent
@Singleton
class AccountRoleUpdater @Inject()
(accountRepository: AccountRepository)
(implicit val actorSystem: ActorSystem, ec: ExecutionContext) {
implicit def ct: ClassTag[UserCreated] = classTag[UserCreated]
// THIS LINE CAUSES ERROR
val cls = ct.runtimeClass.asInstanceOf[Class[UserCreated]]
}
这是 Guice 绑定:
class Module extends AbstractModule with AkkaGuiceSupport {
bind(classOf[account.eventlistener.AccountRoleUpdater]).asEagerSingleton()
}
当应用程序启动时,我收到以下异常:
CreationException: Unable to create injector,看到如下错误:
1) 在 Module.configure(Module.scala:64) 的 account.eventlistener.AccountRoleUpdater.(AccountRoleUpdater.scala:45) 处注入构造函数 java.lang.StackOverflowError 时出错(通过模块:com.google.inject.util.Modules$ OverrideModule -> 模块)同时定位 account.eventlistener.AccountRoleUpdater
1 错误] 在 play.core.server.DevServerStart$$anon$1.reload(DevServerStart.scala:186) 在 play.core.server.DevServerStart$$anon$1.get(DevServerStart.scala:124) 在 play.core。 server.AkkaHttpServer.modelConversion(AkkaHttpServer.scala:183) at play.core.server.AkkaHttpServer.handleRequest(AkkaHttpServer.scala:189) at play.core.server.AkkaHttpServer.$anonfun$createServerBinding$3(AkkaHttpServer.scala:106)在 akka.stream.impl.fusing.MapAsync$$anon$23.onPush(Ops.scala:1172) 在 akka.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:499) 在 akka.stream.impl.fusing .GraphInterpreter.processEvent(GraphInterpreter.scala:462) at akka.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:368) at akka.stream.impl.fusing.GraphInterpreterShell.runBatch(ActorGraphInterpreter.scala:571) Caused by: com.google.inject.CreationException: Unable to create injector,看到如下错误:
1) 在 Module.configure(Module.scala:64) 的 account.eventlistener.AccountRoleUpdater.(AccountRoleUpdater.scala:45) 处注入构造函数 java.lang.StackOverflowError 时出错(通过模块:com.google.inject.util.Modules$ OverrideModule -> 模块)同时定位 account.eventlistener.AccountRoleUpdater
在 com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:184) 在 com.google.inject.internal.InternalInjectorCreator 的 com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:470) 出现 1 个错误.build(InternalInjectorCreator.java:110) 在 com.google.inject.Guice.createInjector(Guice.java:99) 在 com.google.inject.Guice.createInjector(Guice.java:84) 在 play.api.inject。 guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:185) at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:137) at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21)在 play.core.server.DevServerStart$$anon$1.$anonfun$reload$3(DevServerStart.scala:174) 在 play.utils.Threads$。withContextClassLoader(Threads.scala:21) 原因:java.lang.StackOverflowError: null at account.eventlistener.AccountRoleUpdater.ct(AccountRoleUpdater.scala:21) at account.eventlistener.AccountRoleUpdater.ct(AccountRoleUpdater.scala:21) at account .eventlistener.AccountRoleUpdater.ct(AccountRoleUpdater.scala:21) 在 account.eventlistener.AccountRoleUpdater.ct(AccountRoleUpdater.scala:21) 在 account.eventlistener.AccountRoleUpdater.ct(AccountRoleUpdater.scala:21) 在 account.eventlistener.AccountRoleUpdater。 ct(AccountRoleUpdater.scala:21) at account.eventlistener.AccountRoleUpdater.ct(AccountRoleUpdater.scala:21) at account.eventlistener.AccountRoleUpdater.ct(AccountRoleUpdater.scala:21) at account.eventlistener.AccountRoleUpdater.ct(AccountRoleUpdater.scala :21) 在 account.eventlistener。AccountRoleUpdater.ct(AccountRoleUpdater.scala:21)
这似乎是一个周期性的参考。