【发布时间】:2018-01-31 04:11:45
【问题描述】:
我在 play framework 2.6 中使用 java websockets 并且很难弄清楚 Guice DI。下面我正在注入 DbService(执行一些数据库操作),但我将 DbService 设为 null 并在行中抛出 NPE
User user = dbService.findByName(inEvent.getUsername());
dbService 为空。我不确定它为什么不注入 DbService。虽然当我不通过 akka 演员使用它时这项工作。我确实将 DbService 绑定到它的实现。
演员
public class TestActor extends AbstractActor {
@Inject
private DbService dbService;
private ActorRef out;
public static Props props(final ActorRef out) {
return Props.create(TestActor.class, out);
}
public TestActor(ActorRef out) {
this.out = out;
}
@Override
public Receive createReceive() {
return receiveBuilder()
.match(InEvent.class, inEvent -> {
System.out.println(inEvent.getUsername());
User user = dbService.findByName(inEvent.getUsername());
System.out.println(user.getFirstName());
out.tell("userName is ", self());
}
)
.build();
}
}
控制器
public class Application extends Controller {
public WebSocket TestWebSocket() {
return WebSocket.json(InEvent.class).acceptOrResult(request -> {
final Token token = verifyToken(request());
if (token == null) {
return CompletableFuture.completedFuture(F.Either.Left(forbidden()));
}
return CompletableFuture.completedFuture(
F.Either.Right(ActorFlow.actorRef(out -> TestActor.props(out), actorSystem, materializer)));
});
}
}
【问题讨论】:
标签: java playframework playframework-2.0 akka actor