/** * Copyright (C) 2009-2017 Lightbend Inc. */ package docs.actorlambda; import docs.AbstractJavaTest; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import scala.concurrent.Await; import scala.concurrent.duration.Duration; import akka.actor.AbstractActor; import akka.actor.ActorRef; import akka.actor.ActorSystem; import akka.actor.Props; import akka.testkit.JavaTestKit; //#import import akka.actor.Actor; import akka.actor.IndirectActorProducer; //#import public class DependencyInjectionDocTest extends AbstractJavaTest { public static class TheActor extends AbstractActor { final String s; public TheActor(String s) { this.s = s; } @Override public Receive createReceive() { return receiveBuilder() .match(String.class, msg -> { sender().tell(s, self()); }) .build(); } } static ActorSystem system = null; @BeforeClass public static void beforeClass() { system = ActorSystem.create("DependencyInjectionDocTest"); } @AfterClass public static void afterClass() throws Exception { Await.ready(system.terminate(), Duration.create("5 seconds")); } //this is just to make the test below a tiny fraction nicer private ActorSystem getContext() { return system; } static //#creating-indirectly class DependencyInjector implements IndirectActorProducer { final Object applicationContext; final String beanName; public DependencyInjector(Object applicationContext, String beanName) { this.applicationContext = applicationContext; this.beanName = beanName; } @Override public Class actorClass() { return TheActor.class; } @Override public TheActor produce() { TheActor result; //#obtain-fresh-Actor-instance-from-DI-framework result = new TheActor((String) applicationContext); //#obtain-fresh-Actor-instance-from-DI-framework return result; } } //#creating-indirectly @Test public void indirectActorOf() { final String applicationContext = "..."; //#creating-indirectly final ActorRef myActor = getContext().actorOf( Props.create(DependencyInjector.class, applicationContext, "TheActor"), "TheActor"); //#creating-indirectly new JavaTestKit(system) { { myActor.tell("hello", getRef()); expectMsgEquals("..."); } }; } }