Я читаю CDI
инъекции в JavaEE 7, в частности, использую @Qualifier
и @Produces
для инъекции custom Data type
в компонент.
У меня есть следующий код, взятый из документации JBoss ближе к концам страницы.
@Qualifier
@Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public @interface HttpParam {
@Nonbinding public String value();
}
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
class HttpParams {
@Produces @HttpParam("")
String getParamValue(InjectionPoint ip) {
ServletRequest request = (ServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
return request.getParameter(ip.getAnnotated().getAnnotation(HttpParam.class).value());
}
}
И этот квалификатор можно использовать следующим образом:
@HttpParam("username") @Inject String username;
@HttpParam("password") @Inject String password;
У меня вопрос:
что означает аннотация
@Nonbinding
? а зачем это нужно?Если подпись метода всегда должна быть такой
@Nonbindng public String value();
. Я спрашиваю об этом потому, что видел несколько разных примеров, но все они имеют одинаковую подпись. Это разрешено:
public @interface HttpParam { @Nonbinding public int value(); }
- Могу ли я иметь более одного метода, определенного в интерфейсе. То есть разрешено следующее или нет?
public @interface HttpParam { @Nonbinding public String value(); @Nonbinding public int value1(); }
Спасибо