我对 Akka 非常陌生,并试图了解如何处理依赖注入(inject)。我遇到了这个examle ,这让我了解了 Akka 扩展,现在我试图了解它与简单的静态方法调用有何不同。 Akka 教程中关于扩展的部分有这样的例子:
public class CountExtensionImpl implements Extension {
private final AtomicLong counter = new AtomicLong(0);
public long increment() {
return counter.incrementAndGet();
}
}
public class CountExtension extends AbstractExtensionId<CountExtensionImpl> implements ExtensionIdProvider {
public static final CountExtension EXTENSION = new CountExtension();
private CountExtension() {
}
@Override
public CountExtensionImpl createExtension(ExtendedActorSystem system) {
return new CountExtensionImpl();
}
@Override
public ExtensionId<? extends Extension> lookup() {
return EXTENSION;
}
}
public class MyActor extends UntypedActor{
@Override
public void onReceive(Object message) throws Exception {
System.out.println(CountExtension.EXTENSION.get(getContext().system()).increment());
}
}
但我不明白与简单的单例或静态方法相比有什么优势?例如
public class MyActor extends UntypedActor{
@Override
public void onReceive(Object message) throws Exception {
Counter.increment();
}
}
最佳答案
Akka 扩展绑定(bind)到 ActorSystem,因此是每个系统的单例,而不是全局单例。
关于java - Akka 扩展有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35960798/