Guava EventBus 多个订阅者相同的 tpe
Guava EventBus Multiple subscribers same tpe
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
public class Test {
public static class Processing { }
public static class ProcessingResults { }
public static class ProcessingFinished { }
public static EventBus bus = new EventBus();
@Subscribe
public void receiveStartRequest(Processing evt) {
System.out.println("Got processing request - starting processing");
}
@Subscribe
public void processingStarted(Processing evt) {
System.out.println("Processing has started");
}
@Subscribe
public void resultsReceived(ProcessingResults evt) {
System.out.println("got results");
}
@Subscribe
public void processingComplete(ProcessingFinished evt) {
System.out.println("Processing has completed");
}
public static void main(String[] args) {
Test t = new Test();
bus.register(t);
bus.post(new Processing());
}
}
因此,在上面的示例中,可以看出有 2 个订阅者接受相同类型的 Processing。现在,在 post() 时,将调用哪些所有函数?如果将调用 receiveStartRequest 和 processingStarted 这两个函数,那么将以什么顺序调用它们?
您的两个方法都将被调用,并且没有预先确定的顺序。
为了解决这个问题,只需创建两个额外的 类:ProcessingStarted
和 ProcessingRequested
。
public class ProcessingStarted {
private Processing processing;
// Constructors
// Getters/Setters
}
public class ProcessingStarted {
private Processing processing;
// Constructors
// Getters/Setters
}
然后在需要时调用 post(new ProcessingRequested(processing))
和 post(new ProcessingStarted(processing))
,而不是单独调用 post(processing)
。
import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;
public class Test {
public static class Processing { }
public static class ProcessingResults { }
public static class ProcessingFinished { }
public static EventBus bus = new EventBus();
@Subscribe
public void receiveStartRequest(Processing evt) {
System.out.println("Got processing request - starting processing");
}
@Subscribe
public void processingStarted(Processing evt) {
System.out.println("Processing has started");
}
@Subscribe
public void resultsReceived(ProcessingResults evt) {
System.out.println("got results");
}
@Subscribe
public void processingComplete(ProcessingFinished evt) {
System.out.println("Processing has completed");
}
public static void main(String[] args) {
Test t = new Test();
bus.register(t);
bus.post(new Processing());
}
}
因此,在上面的示例中,可以看出有 2 个订阅者接受相同类型的 Processing。现在,在 post() 时,将调用哪些所有函数?如果将调用 receiveStartRequest 和 processingStarted 这两个函数,那么将以什么顺序调用它们?
您的两个方法都将被调用,并且没有预先确定的顺序。
为了解决这个问题,只需创建两个额外的 类:ProcessingStarted
和 ProcessingRequested
。
public class ProcessingStarted {
private Processing processing;
// Constructors
// Getters/Setters
}
public class ProcessingStarted {
private Processing processing;
// Constructors
// Getters/Setters
}
然后在需要时调用 post(new ProcessingRequested(processing))
和 post(new ProcessingStarted(processing))
,而不是单独调用 post(processing)
。