2015-05-14 3 views
1

Как получить контекст аннотации. Я смотрю на этот код (copied from here):Получение контекста с помощью AnnotationConfigApplicationContext в Акке Актер

case object Tick 
case object Get 
@Named 
class CountingService { 
    def increment(count: Int) = count + 1 
} 
@Named 
@Scope("prototype") 
class Counter @Inject() (countingService: CountingService) extends Actor { 

    var count = 0 

    def receive = { 
    case Tick => count = countingService.increment(count) 
    case Get => sender ! count 
    } 
} 

@Configuration 
class AppConfiguration { 
    @Bean 
    def actorSystem = ActorSystem("Akkaspring") 
} 

object Akkaspring extends App { 
    val ctx = new AnnotationConfigApplicationContext 
    ctx.scan("org.typesafe") 
    ctx.refresh() 

    val system = ctx.getBean(classOf[ActorSystem]) 

    val counter = system.actorOf(Props().withCreator(ctx.getBean(classOf[Counter]))) 

    counter ! Tick 
    counter ! Tick 
    counter ! Tick 

    implicit val timeout = Timeout(5 seconds) 

    // wait for the result and print it, then shut down the services 
    (counter ? Get) andThen { 
    case count ⇒ println("Count is " + count) 
    } onComplete { _ => system.shutdown() } 
} 

, но что, если я хочу использовать счетчик в другой актер например:

class CounterUser extends Actor { 
val countingService = system.actorOf(Props().withCreator(ctx.getBean(classOf[Counter]))) 
def receive = { 
    case Tick => countingService ! Tick 
    } 
} 

как получить контекст, в другой актер?

как я могу впрыскивать другие AnnotationConfigApplicationContext для тестирования?

ответ

1

Предполагая CounterUser является Spring боб, вы можете сделать это:

class CounterUser @AutoWired() (ctx: ApplicationContext) extends Actor { 
    val countingService =  system.actorOf(Props().withCreator(ctx.getBean(classOf[Counter]))) 
    def receive = { 
    case Tick => countingService ! Tick 
    } 
} 

Вот еще один способ сделать то же самое с помощью AKKA расширения: https://github.com/bijukunjummen/akka-scala-spring/tree/upgrade-spring

+0

Спасибо, я попробую это. есть ли способ, если CounterUser не является Spring bean? – igx

Смежные вопросы