将参数注入Akka Props和Creator实例

时间:2015-08-21 12:25:56

标签: java akka

Akka Java在这里。

如果我有以下演员:

// Groovy pseudo-code.
class Fizz extends UntypedActor {
    Buzz buzz
    String serviceURL

    Fizz(Buzz buzz, String serviceURL) {
        super()

        this.buzz = buzz
        this.serviceURL = serviceURL
    }

    static Props props() {
        Props.create(new Creator<ActorRef>() {
            @Override
            ActorRef create() throws Exception {
                new Fizz() // <— but I’d like to create a Fizz with a 
                           // particular buzz/serviceURL
            }
        }
    }

    @Override
    void onReceive(Object msg) {
        // etc.
    }
}

我想创建该actor的实例(ActorRef),然后从我发现的文档/代码示例中,我似乎可以这样做:

actorSystem.actorOf(Props.create(Fizz), “fizz")

我可以假设Props.create(Fizz)调用调用静态Fizz.props()方法,从而返回新的Fizz实例吗?

如果是这样,那么我想知道如何将参数传递给构造函数。根据{{​​3}},有一个Props.create(Class<T> clazz, Object…args)重载,但我不知道如何将args传递给不需要参数的Fizz.props()

无论哪种方式,我都在寻找一个具体的Java示例,它展示了如何修改actorSystem.actorOf(Props.create(Fizz.class), “fizz”)调用以传递buzzserviceURL参数。我需要这个,因为我最终会有很多Fizz个实例,每个实例都有不同的buzzserviceURL个参数/配置。

1 个答案:

答案 0 :(得分:2)

不,它不会调用你的道具方法。

(使用Akka 2.3.8):在您的示例中使用overload(为了简洁起见,使用Java 8):

public static Props props(Buzz buzz, String url) {
    Props.create(Fizz.class, () -> buzz, url);
}

您必须在创建时明确调用它才能获得正确的Props

ActorRef fizzActor = system.actorOf(
    Fizz.props(buzzObject, "somestring"), "actor_name");