До Akka 2.6 или с классовыми c актерами можно написать расширение Akka, чтобы иметь доступ к аннотации Spring @Inject в нетипизированных актерах Akka.
Один из примеров: https://github.com/typesafehub/activator-akka-java-spring/blob/master/src/main/java/sample/SpringExtension.java
Однако, это не работает для новых актеров типа Akka.
Документация Akka не показывает, как сделать такое расширение (но оно показывает, как сделать простое extensions: https://doc.akka.io/docs/akka/current/typed/extending.html#building -an-extension ).
Пока что я написал это начало расширения, но я не знаю, как связать SpringCon ApplicationContext с системой акторов:
import org.springframework.context.ApplicationContext;
import akka.actor.typed.ActorSystem;
import akka.actor.typed.Extension;
import akka.actor.typed.ExtensionId;
public class SpringExtension implements Extension {
private volatile ApplicationContext applicationContext;
private SpringExtension(final ActorSystem<?> system) {
// TODO: What do you put here?
}
void initialize(final ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
public static class Id extends ExtensionId<SpringExtension> {
private static final Id instance = new Id();
private Id() {}
// called once per ActorSystem
@Override
public SpringExtension createExtension(final ActorSystem<?> system) {
return new SpringExtension(system);
}
public static SpringExtension get(final ActorSystem<?> system) {
return instance.apply(system);
}
}
}
Как написать расширение Akka для типизированных актеров, позволяющее использовать Spring DI в типизированных актерах?