이해하기 좋은 자료부터 공유. 

Guava’s Event Bus from Venkaiah Chowdary Koneru



여러 Event를 만들어 던지고, 또한 조건에 따라 EventListener를 이용하여 받을 때, 하나의 EventBus를 사용하면 코드가 간결해질 수 있다. 이런 IDEA로 만들어진 것이 Guava의 EventBus이다. 


하나의 EventBus를 생성 후, Listener interface를 상속하지 않은 pojo 클래스를 하나 생성하고 이벤트를 받을 메소드에 @Subscribe 를 추가하면 된다. 클래스에 @Subscribe 를 추가만 해도 Event는 전달되도록 되어 있다.

그리고 EventBus.post()의 인자 type에 따라 Event를 전달하는 방식이라, 객체 지향적으로 코드를 개발할 수 있다. 


import org.junit.Test;

import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;

public class GuavaTest {

class EventBusListener {
private boolean received;

@Subscribe
public void recieveMessage(String message) {
System.
out.println("String : " + message);
received = true;
}
                @Subscribe
public void getMessage(String message) {
System.
out.println("xxx : " + message);
received = true;
}

public boolean isReceived() {
return received;
}
}

class User {
int id;
public User(int id) {
this.id = id;
}
}

class UserEventBusListener {
private boolean received;

@Subscribe
public void recieveMessage(User user) {
System.
out.println("User : " + user.id);
received = true;
}
public boolean isReceived() {
return received;
}
}

@Test
public void test() {
EventBus
eventBus = new EventBus("test");

EventBusListener
eventBusListener = new EventBusListener();
UserEventBusListener
userEventBusListener = new UserEventBusListener();
eventBus.register(eventBusListener);
eventBus.register(userEventBusListener);

eventBus.post(new String("hello"));
eventBus.post(new User(1));
}
}



결과

String : hello

xxx : hello

User : 1


'general java' 카테고리의 다른 글

[play1] play deps --forceCopy  (0) 2015.05.06
maven mvn:deploy 시 401 에러  (0) 2015.04.27
[Guava] Monitor 예제  (0) 2015.04.21
[Guava] Futures 예제  (0) 2015.04.17
[Guava] Preconditions 예제  (0) 2015.04.16
Posted by '김용환'
,