在 Contexts and Dependency Injection (CDI) 1.0 实现中,用于实现 javax.enterprise.inject.spi.InjectionPoint 接口的类上的 getAnnotated 方法可返回 javax.enterprise.inject.spi.Annotated 实例。在 CDI 1.2 实现中,getAnnotated 方法必须返回 AnnotatedField 或 AnnotatedParameter 实例,这取决于注入点是构造函数/方法上所注入的字段还是参数。
此规则将标记用于实现 javax.enterprise.inject.spi.InjectionPoint 接口的类上 getAnnotated 方法中 Annotated 构造函数的调用。例如,将标记以下对 new Annotated() 的调用:
public class MyInjectionPoint implements InjectionPoint {
public Annotated getAnnotated() {
return new Annotated() {
public Set<Annotation> getAnnotations() {
return null;
}
...
};
}
...
}
二进制应用程序扫描程序标记实现 javax.enterprise.inject.spi.InjectionPoint 接口的类上的所有 getAnnotated 方法。如果标记的 getAnnotated 方法返回 AnnotatedParameter 或 AnnotatedField 的实例,那么可忽略此规则。如果 getAnnotated 方法返回 Annotated 的实例,那么必须更改代码。
在 CDI 1.2 实现中,包含类 MyInjectionPoint 的应用程序将无法启动,并且会抛出以下异常:
org.jboss.weld.exceptions.IllegalArgumentException: WELD-001521: InjectionPoint.getAnnotated() must return either AnnotatedParameter or AnnotatedField
要解决此问题,请将对 new Annotated() 的调用替换为 new AnnotatedField() 或 new AnnotatedParameter(),这取决于注入点是构造函数/方法上所注入的字段还是参数。
有关 Java EE 7 CDI 1.2 实现的更多信息,请参阅 Contexts and Dependency Injection 1.2 行为更改。