@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if(resolver.get().isPresent()) { String routingKey = resolver.get().get(); memcachedClient.beginWithNamespace(routingKey); try { return method.invoke(memcachedClient, args); } finally { memcachedClient.endWithNamespace(); } } else { throw new IllegalStateException("Unresolved routing key"); } } });