Guest User

Untitled

a guest
Jul 20th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. package io.crazy88.beatrix.boot.akka.spring;
  2.  
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.stereotype.Component;
  5.  
  6. import akka.actor.Extension;
  7. import akka.actor.IndirectActorProducer;
  8. import akka.actor.Props;
  9. import lombok.RequiredArgsConstructor;
  10.  
  11. @Component
  12. @RequiredArgsConstructor
  13. public class ActorExtension implements Extension {
  14.  
  15. private final ApplicationContext applicationContext;
  16.  
  17. public Props props(Class<?> actorClass, Object... args) {
  18. return Props.create(ActorProducer.class, applicationContext, getActorName(actorClass), args);
  19. }
  20.  
  21. private static String getActorName(Class<?> clazz) {
  22. Actor annotation = clazz.getAnnotation(Actor.class);
  23. return annotation != null ? annotation.value() : clazz.getSimpleName();
  24. }
  25.  
  26. @RequiredArgsConstructor
  27. static class ActorProducer implements IndirectActorProducer {
  28.  
  29. private final ApplicationContext applicationContext;
  30.  
  31. private final String beanName;
  32.  
  33. private final Object[] args;
  34.  
  35. @Override
  36. public akka.actor.Actor produce() {
  37. return (akka.actor.Actor) applicationContext.getBean(beanName, args);
  38. }
  39.  
  40. @Override
  41. @SuppressWarnings("unchecked")
  42. public Class<? extends akka.actor.Actor> actorClass() {
  43. return (Class<? extends akka.actor.Actor>) applicationContext.getType(beanName);
  44. }
  45. }
  46. }
Add Comment
Please, Sign In to add comment