@Override
  public Sub addHandler(final Object handler) {
    Method[] methods = handler.getClass().getMethods();

    for (final Method method : methods) {

      Subscribe subscriber = method.getAnnotation(Subscribe.class);

      if (subscriber != null) {

        for (final String event : events(subscriber)) {
          this.on(event, new Handler() {

            @Override
            public boolean handle(String data) {
              try {
                method.invoke(handler, data);
              } catch (Exception e) {
                LOGGER.error("Error handling event " + event + " with method " + method);
              }
              return false;
            }
          });
        }
      }
    }

    return this;
  }