Dependency injection 限定符中@Nonbinding注释在JavaEE7中的作用是什么?
我正在阅读JavaEE7中的Dependency injection 限定符中@Nonbinding注释在JavaEE7中的作用是什么?,dependency-injection,cdi,java-ee-7,inject,Dependency Injection,Cdi,Java Ee 7,Inject,我正在阅读JavaEE7中的CDI注入,特别是使用@Qualifier和@products将自定义数据类型注入bean 下面的代码取自本页末尾 @Qualifier @Retention(RUNTIME) @Target({TYPE, METHOD, FIELD, PARAMETER}) public @interface HttpParam { @Nonbinding public String value(); } import javax.enterprise.inject.Pro
CDI
注入,特别是使用@Qualifier
和@products
将自定义数据类型
注入bean
下面的代码取自本页末尾
@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
注释是什么意思?为什么需要它@nonbinding public String value()代码>。我问这个问题的原因是我见过几个不同的例子,但它们都有相同的签名。这是允许的:
@非绑定
参数进行匹配@HttpParam(“”
)。如果参数是绑定的(即非@Nonbinding
),则@HttpParam(“”
将与注入点上的@HttpParam(“用户名”)
不匹配请参阅CDI规范中的。是否可以给出绑定和非绑定的示例,并说明其区别。这将非常有帮助。我在尝试将拦截器绑定与参数化注释一起使用时,遇到了您在第二个解释中描述的确切行为。我不顾一切地想找到解决办法。你救了我一天。谢谢。 public @interface HttpParam { @Nonbinding public int value(); } public @interface HttpParam { @Nonbinding public String value(); @Nonbinding public int value1(); }