我正在阅读JavaEE 7中的CDI
注入(inject),特别是使用@Qualifier
和@Produces
将custom Data type
注入(inject)到bean中。
我有下面的代码从JBoss documentation截取到页面的两端。
@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();
}
谢谢
最佳答案
@Nonbinding
参数进行匹配。 @HttpParam("")
。如果参数是绑定(bind)的(即不是@Nonbinding
),则@HttpParam("")
与注入(inject)点上的@HttpParam("username")
不匹配。 请参阅CDI规范中的Typesafe resolution。