core/play/src/main/java/play/inject/BindingKey.java
public <A extends Annotation> BindingKey<T> qualifiedWith(final Class<A> annotation) {
    return underlying.qualifiedWith(annotation).asJava();
  }
public <A extends Annotation> BindingKey<T> qualifiedWith(final Class<A> annotation) {
    return underlying.qualifiedWith(annotation).asJava();
  }
Qualify this binding key with the given annotation.

<p>For example, you may have both a cached implementation, and a direct implementation of a
service. To differentiate between them, you may define a Cached annotation:

<pre>{@code
bindClass(Foo.class).qualifiedWith(Cached.class).to(FooCached.class),
bindClass(Foo.class).to(FooImpl.class)

...

class MyController {
{@literal @}Inject
MyController({@literal @}Cached Foo foo) {
...
}
...
}
}</pre>

In the above example, the controller will get the cached {@code Foo} service.