Guava学习笔记--02. EventBus使用

Guava EventBus

EventBus 是Guava的一个发布订阅的模型,先看一个简单的实现:

  1. 定义一个Event的消息传递对象

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

    public class TestEvent1 {
    private final int message;

    /**
    * 构造方法
    * @param message
    */
    public TestEvent1(int message) {
    this.message = message;
    // System.out.println("TestEvent1 事件message:"+message);
    }

    public int getMessage() {
    return message;
    }
    }

  1. 定义一个Listener

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class EventListener {
    public int lastMessage = 0;

    @Subscribe
    public void listen(TestEvent1 event) {
    lastMessage = event.getMessage();
    System.out.println("Message:"+lastMessage);
    }

    public int getLastMessage() {
    return lastMessage;
    }
    }

  2. 定义一个使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

    public static void main(String[] args) {
    // 1.构造一个事件总线
    EventBus eventBus = new EventBus("test");

    // 2.构造一个事件监听器
    EventListener listener = new EventListener();

    // 3.把事件监听器注册到事件总线上
    eventBus.register(listener);

    // 4.事件总线发布事件,触发监听器方法
    eventBus.post(new TestEvent1(1));

    }

运行结果是:

1
Message:1

如果是多个方法需要调用,只需要在新方法上面加上@Subscribe注解。

1
2
3
4
5
@Subscribe         
public void listen2(TestEvent1 event) {
lastMessage = event.getMessage();
System.out.println("Message2:"+lastMessage);
}

如果想使用异步的方法处理,可以使用AsyncEventBus ,具体代码:

1
2
3

AsyncEventBus eventBus = new AsyncEventBus (Executors.newFixedThreadPool(3));

阅读更多

Guava学习笔记--01. Joiner使用

对于Guava的认识来自于阅读QMQ源码的时候,有很多没有使用过的Java方法和集合,所以就查了查,发现是用的是Guava的类库,所以就有了下面的博客:

1. 字符串的拼接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
private final List<String> stringList = Arrays.asList("Google", "Guava", "Java", "Scala", "Kafka");
private final List<String> stringListWithNullValue = Arrays.asList("Google", "Guava", "Java", "Scala", null);


//1. 字符串的拼接
@Test
public void Test() {
String join = Joiner.on("*").join(stringList);
System.out.println(join);
assertEquals(join, "Google*Guava*Java*Scala*Kafka");
}

@Test(expected = NullPointerException.class)
public void TestJoinValue() {
String join = Joiner.on("*").join(stringListWithNullValue);
System.out.println(join);
assertEquals(join, "Google*Guava*Java*Scala*Kafka");
}

2. 跳过空数据

1
2
3
4
5
6
7
//2. 跳过空数据
@Test
public void TestJoinSkipValue() {
String join = Joiner.on("*").skipNulls().join(stringListWithNullValue);
System.out.println(join);
assertEquals(join, "Google*Guava*Java*Scala");
}

3. 为空的数据指定一个默认值

1
2
3
4
5
6
7
 //3. 为空的数据指定一个默认值
@Test
public void TestJoinDefalutValue() {
String join = Joiner.on("*").useForNull("Defalut").join(stringListWithNullValue);
System.out.println(join);
assertEquals(join, "Google*Guava*Java*Scala*Defalut");
}

4. 追加到StringBuilder

1
2
3
4
5
6
7
8
9
//4. 追加到StringBuilder
@Test
public void TestJoinDefalutValueStringBuffer() {
StringBuilder stringBuilder = new StringBuilder();
StringBuilder thatBuilder = Joiner.on("*").useForNull("Defalut").appendTo(stringBuilder, stringListWithNullValue);
assertThat(thatBuilder, sameInstance(stringBuilder));
assertThat(stringBuilder.toString(), equalTo("Google*Guava*Java*Scala*Defalut"));
assertThat(thatBuilder.toString(), equalTo("Google*Guava*Java*Scala*Defalut"));
}
阅读更多