이해하기 좋은 자료부터 공유.
여러 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;
}
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));
}
}
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 |