gpt4 book ai didi

java - Play框架2.6 java websockets akka依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-01 06:04:14 25 4
gpt4 key购买 nike

我在 play 框架 2.6 中使用 java websockets,并且很难弄清楚 Guice DI。下面我注入(inject)了 DbService (执行一些数据库操作),但我将 DbService 设置为 null 并在行中抛出 NPE

User user = dbService.findByName(inEvent.getUsername());

dbService 为空。我不确定为什么它不注入(inject) DbService。虽然当我不通过 akka Actor 使用它时这项工作有效。我确实将 DbService 绑定(bind)到它的实现。

Actor

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();
}

}

Controller

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)));

});
}

}

最佳答案

您的 actor 将根据 Props.create() 中使用的参数构建。

在您的示例中:

Props.create(Class<TestActor>, ActorRef);

TestActor.class 中的构造函数与 ActorRef 类型的一个参数相匹配,并且该构造函数将使用您提供的参数进行调用。

您可以更改构造函数签名和 props 方法,如下所示:

...
public static Prop props(ActorRef out, DBServide db) {
return Props.create(TestActor.class, out, db);
}
...
public TestActor(ActorRef out, DBService db) {
this.out = out;
this.dbService = db;
}
...

这样,将使用构造函数TestActor(ActorRef, DBService),并且您将获得调用静态方法props时使用的DBService实例。

关于java - Play框架2.6 java websockets akka依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48534358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com