이벤트를 파견하는 것은 짧은 내가 여기 물어 오히려입니까?구아바 EventBus :</p> <p>다수의 가입자에게 이벤트를 전달하거나 이벤트가 항상 첫 번째 적절한 가입자 소비하는 방법이 있나요 : 여러 가입자 구아바의 <code>EventBus</code> 문서부터
후자의 경우 해당 기능을 추가하거나 전체 응용 프로그램에서 전체 이벤트 버스 로직을 구현하려면 EventBus
클래스를 확장하는 것이 더 낫지 않습니까?
이벤트를 파견하는 것은 짧은 내가 여기 물어 오히려입니까?구아바 EventBus :</p> <p>다수의 가입자에게 이벤트를 전달하거나 이벤트가 항상 첫 번째 적절한 가입자 소비하는 방법이 있나요 : 여러 가입자 구아바의 <code>EventBus</code> 문서부터
후자의 경우 해당 기능을 추가하거나 전체 응용 프로그램에서 전체 이벤트 버스 로직을 구현하려면 EventBus
클래스를 확장하는 것이 더 낫지 않습니까?
이벤트는 이벤트 유형과 일치하는 한 모든 등록 된 가입자에게 라우팅됩니다. 이벤트를 게시 단순히 포스트 (Object) 메소드에 이벤트 객체를 제공하기 위해
게시 이벤트
:
IT는 Javadoc
EventBus
의에 있습니다. EventBus 인스턴스는 이벤트의 유형을 판별하고 등록 된 모든 리스너로 라우트합니다.이벤트는 유형에 따라 라우팅됩니다. 이벤트는 이벤트가 할당 될 수있는 모든 유형의 구독자에게 전달됩니다. 여기에는 구현 된 인터페이스, 모든 수퍼 클래스 및 수퍼 클래스로 구현 된 모든 인터페이스가 포함됩니다.
후자의 경우, 그것은 더 나은 같은 기능을 추가하거나 자신의 응용 프로그램에서 전체 이벤트 버스 로직을 구현하기 위해 EventBus 클래스를 확장하는 것? 내 생각
는 당신이 필요로하는 모든 이벤트에 handled
속성을 추가하고 모든 핸들러에 testAndSet
를 추가하는 것입니다. 수동으로 수행하는 경우 오류가 발생하기 쉽습니다.
이벤트에 대한 래퍼를 만들면 호출하지 않고도 액세스 할 수 있습니다.
@RequiredArgsConstructor
class WrappedEvent<E extends MyEvent> {
private final E event;
private boolean handled;
Optional<E> getAndMarkHandledUnlessHandled() {
if (handled) {
return Optional.empty();
} else {
handled = true;
return Optional.of(event);
}
}
}
또는 callAndMarkHandledUnlessHandled(Consumer<E> consumer)
과 같은 더 기능적인 방식으로 수행하십시오. 비동기 파견의 경우 AtomicBoolean
을 사용합니다.
그러나 지우기 때문에 EventBus
에는 일반적인 정보가 없으므로 WrappedEvent<A>
및 WrappedEvent<B>
에는 사용할 수 없습니다. 당신은 WrappedA extends WrappedEvent<A> {}
과 같은 래퍼를 하위 클래스화할 수 있으며 함께 사용할 수 있습니다. 망할 놈이야.
의미심장하게는 EventBus
을 확장하는 것은 거의 불가능합니다. 패키지에 몰래 들어 가지 않으려는 경우입니다. 가장 쉬운 방법은 아마도 전체 패키지를 포크하고 this line 이후에 휴식을 추가하는 것입니다.
고마워 - 읽었지만 테스트했지만 내 테스트가 유효하지 않았습니다. 두 번째 청취자를 등록하지 않았습니다 .-) – Hannes