Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package io.crazy88.beatrix.boot.akka.spring;
- import org.springframework.context.ApplicationContext;
- import org.springframework.stereotype.Component;
- import akka.actor.Extension;
- import akka.actor.IndirectActorProducer;
- import akka.actor.Props;
- import lombok.RequiredArgsConstructor;
- @Component
- @RequiredArgsConstructor
- public class ActorExtension implements Extension {
- private final ApplicationContext applicationContext;
- public Props props(Class<?> actorClass, Object... args) {
- return Props.create(ActorProducer.class, applicationContext, getActorName(actorClass), args);
- }
- private static String getActorName(Class<?> clazz) {
- Actor annotation = clazz.getAnnotation(Actor.class);
- return annotation != null ? annotation.value() : clazz.getSimpleName();
- }
- @RequiredArgsConstructor
- static class ActorProducer implements IndirectActorProducer {
- private final ApplicationContext applicationContext;
- private final String beanName;
- private final Object[] args;
- @Override
- public akka.actor.Actor produce() {
- return (akka.actor.Actor) applicationContext.getBean(beanName, args);
- }
- @Override
- @SuppressWarnings("unchecked")
- public Class<? extends akka.actor.Actor> actorClass() {
- return (Class<? extends akka.actor.Actor>) applicationContext.getType(beanName);
- }
- }
- }
Add Comment
Please, Sign In to add comment