依赖注入 – 应该在Java EE7中的限定符中@Nonbinding注释的目的是什么?

我正在阅读 JavaEE 7中的CDI注入,特别是使用@Qualifier和@Produces将自定义数据类型注入到bean中. 我有以下代码从JBoss documentation到页面的末尾. @Qualifier@Retention(RUNTIME)@Target({TYPE, METHOD, FIELD, PARAMETER})public @interface HttpParam

我正在阅读
JavaEE 7中的CDI注入,特别是使用@Qualifier和@Produces将自定义数据类型注入到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();
    } 

谢谢

>默认情况下,限定符参数用于将bean限定符与注入点限定符匹配. @Nonbinding参数不考虑匹配.

>在这种情况下,producer方法生成的bean具有限定符@HttpParam(“”).如果参数是绑定的(即不是@Nonbinding),则@HttpParam(“”)与注入点上的@HttpParam(“username”)不匹配.

>您可以拥有任意数量的限定符参数,绑定或非绑定.

请参阅CDI规范中的Typesafe resolution.

作者: dawei

【声明】:永州站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部