Как вы пишете типизированное расширение Akka для Spring для внедрения зависимостей в конструктор? - PullRequest
5 голосов
/ 30 января 2020

До 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 в типизированных актерах?

...