我正在阅读
JavaEE 7中的CDI注入,特别是使用@Qualifier和@Produces将自定义数据类型注入到bean中.
@H_502_25@
>默认情况下,限定符参数用于将bean限定符与注入点限定符匹配. @Nonbinding参数不考虑匹配.
我有以下代码从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(); }
谢谢
>在这种情况下,producer方法生成的bean具有限定符@HttpParam(“”).如果参数是绑定的(即不是@Nonbinding),则@HttpParam(“”)与注入点上的@HttpParam(“username”)不匹配.
>您可以拥有任意数量的限定符参数,绑定或非绑定.
请参阅CDI规范中的Typesafe resolution.